3

假设我们有

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 查询来实现这一点?

4

2 回答 2

2

听起来可能有更好的方法来实现您正在尝试做的事情,但是如果没有更多信息,很难提出高级建议。

这是一个查询,它将获得您要查找的内容:

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

您会注意到它涉及列出您正在搜索的标签对的每个组合,因此它不能很好地扩展到更大的查询。

$all编辑:通过使用而不是简化查询$and

于 2013-07-01T18:03:17.707 回答
-1

如果要从 shell 执行此操作,可以使用 javascript。使用以下代码创建一个 javascopt 文件:

use test;

var initialArray = [1, 2, 3];

for (i = 0; i < initialArray.length; i++) {
    for(j = initialArray.length-1; j>=i; j--) {
        if(i!=j) {
            var matchingArray = [initialArray[i].toString(), initialArray[j].toString()];
            print("\nResults using array: " + matchingArray);

            var result = db.posts.find({tags: {$all: matchingArray}});

            while(result.hasNext()){
                printjson(result.next());
            }
        }
    }
}

并运行命令

C:\> mongo < query.js

注意:您可以对其进行优化以获得独特的结果。

于 2013-07-01T16:44:43.723 回答