node.js - mongodb elemmatch 在多列上面临问题

标签 node.js mongodb mongoose

我有一个这样的数据集:

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

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

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

最佳答案

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

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

关于node.js - mongodb elemmatch 在多列上面临问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50984256/

相关文章:

user-interface - 如何配置node-mysql?

node.js - Mongoose $text 字段错误

javascript - NodeJS 在函数完成之前响应

javascript - 使用 mongoose 使用默认数据初始化 mongoDB 数据库

ruby-on-rails - 等价于 Node.js 的 Rails 控制台

node.js - 如何获取房间列表

node.js - "ERROR while connecting to database. Error: Error: No valid replicaset instance servers found"

mongodb - 是否可以创建一个 Mongoose Hook 以将投影应用于所有查询

javascript - 尝试关闭和打开命令quick.db

Mongodb findAndModify 每个文档