我有一个类似的文件:
{
_id:"1",
archive:[{mark:10},{mark:20},{mark:30},{mark:40}]
},
{
_id:"2",
archive:[{mark:12},{mark:25},{mark:30}]
},
{
_id:"3",
archive:[{mark:15},{mark:18}]
}
....
我想找到档案所在的档案{mark:30}但不到标记:30。
如果我使用查询:
{archive:{$elemMatch:{ mark:{$lte:30}}}
将获得2,3
的文件如果我是用户查询:
{archive:{$elemMatch:{ mark:{$lte:30,$in:[30]}}}
将获得1,2。
如何只获取文件2? 谢谢!
答案 0 :(得分:2)
您可以尝试满足逻辑
的查询匹配
pointer-events: auto;
archive
和{ "mark": 30 }
为NOT的文档 大于30(同样小于或等于30):
mark
或明确使用$and
运算符
db.collection.find({
"archive.mark": {
"$eq": 30,
"$not": { "$gt": 30 }
}
})
答案 1 :(得分:0)
使用$ elemMatch
db.getCollection('yourCollection').find(
{
archive: {
$elemMatch: {
$and: [
{ mark: { $eq: 30 }},
{ mark: { $lte: 30 }},
{ mark: { $not: { $gt: 30 } } }
]
}
}
})