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

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