我们假设我们有
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查询来实现这一目标?
答案 0 :(得分:2)
听起来可能有更好的方法来实施您尝试做的事情,但如果没有更多信息,很难提出高级别的建议。
以下是一个可以获取您正在寻找的内容的查询:
{
$or:
[
{
tags:
{
$all: ['1', '3']
}
},
{
tags:
{
$all: ['3', '5']
}
},
{
tags:
{
$all: ['1', '5']
}
}
]
}
您会注意到它涉及列出您正在搜索的标记对的每个组合,因此它不会很好地扩展到较大的查询。
修改:使用$all
代替$and
简化了查询。
答案 1 :(得分:-1)
如果你想从shell中执行此操作,可以使用javascript。使用以下代码创建javascropt文件:
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
注意:您可以对其进行优化以获得独特的结果。