使用或运算符和数组元素投影进行mongo查询

时间:2017-02-03 07:56:01

标签: mongodb mongodb-query

我有这些文件

{ 
    "_id" : 1468636149351, 
    "subject" : 1, 
    "likes" : [
        1, 
        2, 
        3
    ]
}
{ 
    "_id" : 1468677473954, 
    "subject" : 1, 
    "likes" : [
        1, 
        4, 
        3
    ]
}

我想通过" subject"和"喜欢"并获得所有主题和类似元素相似或不匹配

例如:如果我按"主题":1和"喜欢":2我应该

{ 
    "_id" : 1468636149351, 
    "subject" : 1, 
    "likes" : [2]
}
{ 
    "_id" : 1468677473954, 
    "subject" : 1, 
    "likes" : []
}

我试过了:

db.collection.find(
        { $or: [ { "subject": 1} , { "subject": 1 , "likes": 1 } ]},
        {"likes.$":1})

但我得到错误:位置运算符(like。$)需要查询说明符中的相应字段

2 个答案:

答案 0 :(得分:1)

如果您在查询不匹配时不返回likes数组,则可以尝试这样的操作。

db.collection.find({"subject": 1},{"subject": 1, "likes":{$elemMatch:{$eq:2}}}})

答案 1 :(得分:0)

我尝试使用new File("")以您指定的方式投影文档。

查询:

$map

输出

db.collection.aggregate([
{ 
    "$match": {
            $or : [
                {"subject": 1},
                {"likes":{$elemMatch:{$eq:2}}}
            ]
        }
},
{
    "$project": {
        "_id" : "$_id",
        "subject" : "$subject",
        "likes" : {
            "$setDifference": [
                {
                    "$map": {
                      "input": "$likes",
                      "as": "likes",
                      "in": {
                            "$cond": {
                              "if": {$eq : ["$$likes" , 2]},
                              "then": "$$likes",
                              "else": false
                            }
                          }
                    }
                },
                [false]
            ]
        }
    }
}])