首页 > 解决方案 > mongodb elemmatch 在多个列上面临问题

问题描述

我有一个这样的数据集:

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

现在我想通过元素匹配查询所有元素,即 a、b 和 c 列是否有用户 ID 退出。

我知道单列的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 } } },
      ]

标签: node.jsmongodbmongoose

解决方案


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

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

推荐阅读