首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB中任何文档值的文本搜索

MongoDB中任何文档值的文本搜索
EN

Stack Overflow用户
提问于 2018-07-26 19:04:03
回答 1查看 34关注 0票数 0

假设我有这样一个MongoDB文档:

代码语言:javascript
复制
{
    "_id"  : ObjectId("xxxx-xxxx"),
    "name" : "judge dredd",
    "docs" : {
        "readme-1" : "Please do!",
        "readme-2" : "Go ahead...",
        "readme-n" : "foo bar"
    }
}

如何创建一个文本索引,它可以索引和搜索对象docs的任何值,但不能搜索其他值?

docs文档中的键可能是任何问题,我不知道它们是什么。

MongoDB文档提到一个通配符运算符:

代码语言:javascript
复制
db.collection.createIndex( { "$**": "text" } )

但这会索引每个字符串,包括我不想要的name。标准的方法似乎使用了点属性:

代码语言:javascript
复制
db.collection.createIndex( { "docs.readme-1":"text", "docs.readme-2":"text, ... } )

但如前所述,对象键可能是任何东西,我不知道它们的前期。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 19:26:05

您可以使用所需对象的引用创建另一个模型,例如:

代码语言:javascript
复制
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或任何您称为它时,您只需执行以下操作

代码语言:javascript
复制
 Id.findOne({name:req.body.name}).populate('documentReferenced').exec(( err, document)=> {
    your code here....
 });

我不知道是否还有更好的方法来满足你的需要,但这可能是一个很好的解决办法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51545914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档