在MongoDB中对任何文档值进行文本搜索

时间:2018-07-26 19:04:04

标签: mongodb text-search

假设我有一个像这样的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, ... } )

但是如前所述,对象键可能是任何东西,而我并不事先知道。

如果不可能,是否有更好的方法来重新排列我的数据文档,使之成为可能?

1 个答案:

答案 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....
 });

我真的不知道是否还有另一种更好的方法可以满足您的需求,但这可能是一个不错的解决方法。