我有一个这样的数据集:
{
"_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/