对 MongoDB 中的任何文档值进行文本搜索
Text search on any document value in MongoDB
假设我有一个这样的 MongoDB 文档:
{
"_id" : ObjectId("xxxx-xxxx"),
"name" : "judge dredd",
"docs" : {
"readme-1" : "Please do!",
"readme-2" : "Go ahead...",
"readme-n" : "foo bar"
}
}
我如何创建一个 text index 可以索引和搜索对象 docs
的任何值,但没有别的?
docs
文档的key可能是什么的问题,我之前不知道是什么
MongoDB docs提到一个通配符:
db.collection.createIndex( { "$**": "text" } )
但是索引 每个字符串 包括 name
我不想要的。标准方式似乎使用点 属性:
db.collection.createIndex( { "docs.readme-1":"text", "docs.readme-2":"text, ... } )
但如前所述,对象键可以是任何东西,我事先不知道它们。
如果不可能,是否有更好的方法来重新安排我的数据文档以使其成为可能?
您可以使用所需对象的引用创建另一个模型,例如:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const idSchema = new Schema ({
name:{type:string,required:true},
documentReferenced:{Schema.Types.ObjectId, ref:'documentReferenced'}
});
module.exports = mongoose.model('Id ', idSchema);
然后当你需要调用你的 documentReferenced 或任何你称之为的东西时,你只需执行以下操作
Id.findOne({name:req.body.name}).populate('documentReferenced').exec(( err, document)=> {
your code here....
});
我真的不知道是否有其他更好的方法来满足您的需求,但这可能是一个不错的解决方法。
假设我有一个这样的 MongoDB 文档:
{
"_id" : ObjectId("xxxx-xxxx"),
"name" : "judge dredd",
"docs" : {
"readme-1" : "Please do!",
"readme-2" : "Go ahead...",
"readme-n" : "foo bar"
}
}
我如何创建一个 text index 可以索引和搜索对象 docs
的任何值,但没有别的?
docs
文档的key可能是什么的问题,我之前不知道是什么
MongoDB docs提到一个通配符:
db.collection.createIndex( { "$**": "text" } )
但是索引 每个字符串 包括 name
我不想要的。标准方式似乎使用点 属性:
db.collection.createIndex( { "docs.readme-1":"text", "docs.readme-2":"text, ... } )
但如前所述,对象键可以是任何东西,我事先不知道它们。
如果不可能,是否有更好的方法来重新安排我的数据文档以使其成为可能?
您可以使用所需对象的引用创建另一个模型,例如:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const idSchema = new Schema ({
name:{type:string,required:true},
documentReferenced:{Schema.Types.ObjectId, ref:'documentReferenced'}
});
module.exports = mongoose.model('Id ', idSchema);
然后当你需要调用你的 documentReferenced 或任何你称之为的东西时,你只需执行以下操作
Id.findOne({name:req.body.name}).populate('documentReferenced').exec(( err, document)=> {
your code here....
});
我真的不知道是否有其他更好的方法来满足您的需求,但这可能是一个不错的解决方法。