在MongoDB中搜索多个字段以查找多个值

 手机用户2502929967 发布于 2023-01-30 17:58

我有一个MongoDB集合,其中特定字符串可能出现在以下任何一个字段中:

{"_id":1, "field1":"foo","field2":"bar","field3":"baz", "otherfield":"stuff"},
{"_id":2, "field1": "bar", "field2": "baz", "field3": "foo", "otherfield":"morestuff"},
{"_id":3, "field1": "baz", "field2": "foo", "field3": "bar", "otherfield":"you get the idea"}

我需要查询,以便返回所有记录,其中一组字段中的任何一个等于数组中的任何值...基本上,如果我有,["foo","bar"]我需要它匹配,如果这些字符串中的任何一个在field1或field2 (但不是任何其他领域).

显然,我可以通过一系列多个查询来做到这一点

db.collection.find({"field1":{"$in":["foo","bar"]}}) db.collection.find({"field2":{"$in":["foo","bar"]}})

我已经制作了一个非常大的$或查询将它们连接在一起,但它似乎效率太低(我的实际集合需要匹配9个字段中任何一个中可能出现的15个字符串中的任何一个)...但我仍然是nosql数据库的新手,我不确定我需要在这里使用的最佳范例.任何帮助是极大的赞赏.

2 个回答
  • 通过仔细阅读似乎很吸引人的文档找到了另一个答案-文本索引。

    db.collection.ensureIndex({"field1":"text","field2":"text"})
    db.records.runCommand("text",{search:"foo bar"})
    

    当我使用更多的字符串和字段(以及大约100,000条记录)运行实际查询时,该$or/$in方法花费620毫秒,而文本索引花费131毫秒。一个缺点是结果返回了另一种类型的文档。幸运的是,实际文档是每个结果对象的参数。

    感谢那些花时间提出建议的人。

    2023-01-30 17:59 回答
  • 尝试

    db.collection.find(
        // Find documents matching any of these values
        {$or:[
            {"field1":{"$in":["foo","bar"]}},
            {"field2":{"$in":["foo","bar"]}}
        ]}
    )
    

    也请参考这个问题

    2023-01-30 17:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有