我有一个像这样的数据集:
{
"_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 } } },
]
答案 0 :(得分:1)
您可以通过这种方式同时使用$elemMatch
和$and
运算符
db.collection.find({
"parentpost_id": "5b2a1a48131a2116cca581d5",
"a": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
},
"b": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
},
"c": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
}
})