假设我们有

post1.tags = [ '1', '2', '3' ];

post2.tags = [ '2', '4', '5' ];

post3.tags = [ '1', '3', '4' ];

post4.tags = [ '1', '3', '4', '5', '6' ];

我试图找到包含2个或更多给定标记的帖子[“1”,“3”,“5”]。
结果应该是post1、post3和post4。如何编写MongoDB查询来实现这一点?

最佳答案

听起来可能有更好的方法来实现你想要做的事情,但是如果没有更多的信息,很难提出高层次的建议。
下面是一个查询,它将获取您要查找的内容:

{
  $or:
    [
      {
        tags:
          {
            $all: ['1', '3']
          }
      },
      {
        tags:
          {
            $all: ['3', '5']
          }
      },
      {
        tags:
          {
            $all: ['1', '5']
          }
      }
    ]
}

您会注意到,它涉及列出您正在搜索的标记对的每个组合,因此它不能很好地扩展到更大的查询。
编辑:使用$all而不是$and简化查询。

关于mongodb - MongoDb数组交集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17407766/

10-13 21:44