如何使用$ lte和$ in查询mongo值?

时间:2016-11-02 15:47:07

标签: mongodb

我有一个类似的文件:

{
    _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? 谢谢!

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 } } }
            ]
        }
    }
})