如何在mongodb中运行此查询?

时间:2009-11-09 12:55:09

标签: mongodb nosql

我的文档有一个数组字段

Keys1 Keys2 是两个数组

我希望包含 Keys1 AND 中任何值的所有文档中的任何值Keys2

1 个答案:

答案 0 :(得分:3)

还没有很好的方法可以代表这个查询(从1.1.2开始) - 如果你在列表上提出要求或提交功能请求,我们可以尝试一些东西。

现在最好的选择可能是使用$ in查询来完成一半的工作:

db.test.find({keys: {$in: Keys1}})

你可以结合使用可以执行Keys2部分的$ where(但不会利用索引 - 这就是为什么使用常规查询语法尽可能地做到这一点)。这看起来像这样:

db.test.find({keys: {$in: Keys1}, $where: "for (i in this.keys) { for (j in Keys2) { if (this.keys[i] == Keys2[j]) return true;}} return false;"})

在mongodb 2.6+的最新版本中,您可以通过$和运营商执行此操作。

db.test.find({$and:[{keys: {$in: Keys1}},{keys: {$in: Keys2}}]})