mongodb通过多个数组项查找

16 浏览
0 Comments

mongodb通过多个数组项查找

如果我有这样的记录;\n{\n \"text\": \"文本内容在这里\",\n \"words\": [\"文本\", \"在\", \"这里\"]\n}\n\n在MongoDB中如何匹配其中的多个单词?当匹配单个单词时,我可以这样做;\n

db.find({ words: "文本" })

\n但是当我尝试使用多个单词时,它不起作用;\ndb.find({ words: [\"文本\", \"在这里\"] })\n\n我猜想通过使用数组,它尝试将整个数组与记录中的数组进行匹配,而不是匹配各个内容。

0
0 Comments

问题:如何在MongoDB中通过多个数组项进行查找?

原因:在MongoDB中,我们有时需要通过数组的多个项来查找文档。对于这个问题,有两种不同的解决方法,取决于我们是要查找数组中包含所有指定项的文档,还是只要数组中包含其中一项就可以。

解决方法1(查找数组中包含所有指定项的文档):

使用$all操作符,语法如下:

db.things.find({ words: { $all: ["text", "here"] }});

解决方法2(查找数组中包含其中一项的文档):

使用$in操作符,语法如下:

db.things.find({ words: { $in: ["text", "here"] }});

此外,在MongoDB支持页面的文档中,还可以找到另一种方法来解决这个问题。通过创建索引可以提高查询性能,相关链接如下:

- [http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents](http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents)

- [http://docs.mongodb.org/manual/core/indexes/#multikey-indexes](http://docs.mongodb.org/manual/core/indexes/#multikey-indexes)

使用$elemMatch操作符也可以实现类似的功能,语法如下:

db.things.find({ words: { $elemMatch: { $in: ["text","here"] }}})

这种方法不仅代码清晰易读,而且在处理大型文档时速度更快。相比之下,循环数组并执行单个find()操作的方法效率较低。

我们可以根据具体需求选择合适的解决方法来在MongoDB中通过多个数组项进行查找。

0