我有一个名为'test'的集合,因为有一个类似的文档:
{
"_id" : 1
"letters" : [
[ "A", "B" ],
[ "C", "D" ],
[ "A", "E", "B", "F" ]
]
}
如果我这样搜索:
db.getCollection('test').find({"_id" : 1}, {"letters": ["A", "B"] })
然后它将获取记录。
{
"_id" : 1
"letters" : [
[ "A", "B" ],
[ "C", "D" ],
[ "A", "E", "B", "F" ]
]
}
如果我这样搜索:
db.getCollection('test').find({"_id" : 1}, {"letters": ["B", "A"] })
它无法获取记录
我的要求是如果我也这样给([“B”,“A”]),它必须获取文件。因为数组中已存在相同的字母。
我将尝试使用$ all运算符,但它不起作用
db.getCollection('test').find({"_id" : 1}, {"letters": {$all: ["B", "A"]} })
现在它也不会获取记录
任何人都可以请求解决方案。
答案 0 :(得分:0)
您可以这样做:
db.test.find(
{
"$and":[
{"_id" : ObjectId("5a16674b4828c9f51d3b3a18")},
{"$or":[{"letters": ["A", "B"] },{"letters": ["B", "A"] }]}
]
}
)
现在它将搜索具有["A","B"] OR ["B","A"]
。
答案 1 :(得分:0)
db.getCollection('test').find(
{
"_id" : 1,
'letters':{
$elemMatch:{
$elemMatch:{
$in:['B','A']
}
}
}
}
)
此查询将查找所有包含您在最后$中关闭的数组元素的文档, 例, 如果您只指定$ in:['C']或$ in:['B','A']
,它会找到相同的文件