假设我有一个像这样的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
文档的键可能是任何东西,而我不知道这些键是什么。
MongoDB docs提到了通配符:
db.collection.createIndex( { "$**": "text" } )
但是会索引每个字符串,包括我不想要的name
。标准方法似乎使用点属性:
db.collection.createIndex( { "docs.readme-1":"text", "docs.readme-2":"text, ... } )
但是如前所述,对象键可能是任何东西,而我并不事先知道。
如果不可能,是否有更好的方法来重新排列我的数据文档,使之成为可能?
答案 0 :(得分:1)
您可以使用所需对象的引用创建另一个模型,例如:
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....
});
我真的不知道是否还有另一种更好的方法可以满足您的需求,但这可能是一个不错的解决方法。