mongodb elemmatch在面临问题的多个列上

时间:2018-06-22 08:55:22

标签: node.js mongodb mongoose

我有一个像这样的数据集:

{
    "_id" : ObjectId("5b2a1a48131a2116cca581d6"),
    "a" : [ 
        {
            "userid" : "5b28c9447228da1230963d4c"
        }
    ],
    "b" : [],
    "c" : [ 
        {
            "userid" : "5b28c9447228da1230963d4c"
        }
    ],
    "parentpost_id" : "5b2a1a48131a2116cca581d5",
    "__v" : 0
}

现在,我想查询所有元素,即a,b和c列是否有userid出口,或者不是通过elementmatch退出的。

我知道单列的elemmatch查询,即

db.CollectionName.find({'parentpost_id': ObjectId('5b2a1a48131a2116cca581d5')}, {a: {$elemMatch: {'userid': '5b28c9447228da1230963d4c' }}}, function(err, response) {
if (err) {
 console.log(err);
} else {
 console.log(response)
}

但是我不知道如何在一个查询中查询a列,b列和c列。有谁指导我。任何帮助都非常感谢。

//我对多个对象使用了此方法,但是它将返回空白数组。

db.CollectionName.find({
'parentpost_id': ObjectId('5b2a1a48131a2116cca581d5'),
$and: [
        {'likes': {'$elemMatch': {'userid': req.body.userid } } },
        {'ratings': {'$elemMatch': {'userid': req.body.userid } } },
        {'retweets': {'$elemMatch': {'userid': req.body.userid } } },
      ]

1 个答案:

答案 0 :(得分:1)

您可以通过这种方式同时使用$elemMatch$and运算符

db.collection.find({
  "parentpost_id": "5b2a1a48131a2116cca581d5",
  "a": {
    "$elemMatch": {
      "userid": "5b28c9447228da1230963d4c"
    }
  },
  "b": {
    "$elemMatch": {
      "userid": "5b28c9447228da1230963d4c"
    }
  },
  "c": {
    "$elemMatch": {
      "userid": "5b28c9447228da1230963d4c"
    }
  }
})