node.js - 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 } } },
]
解决方案
您可以通过这种方式同时使用$elemMatch
运算符和 运算符$and
db.collection.find({
"parentpost_id": "5b2a1a48131a2116cca581d5",
"a": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
},
"b": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
},
"c": {
"$elemMatch": {
"userid": "5b28c9447228da1230963d4c"
}
}
})
推荐阅读
- php - 如何使用 elequent 模型在 laravel 8 中获取最后插入的 id
- python - Python,如何用它们的行频率替换 Pandas DataFrame 值?
- swift - iPhone 中的免提语音命令
- python - Firestore db的Flask ssl_transport_security错误
- angular - asp.net core angular cookie authentication expiry cors错误
- javascript - 获取和导入时不同来源的相对路径
- docker - 如何在 docker-compose 中为 docker jetty 9.4 设置密钥库凭据
- css - 如何使用 CSS 水平结构化 div 内容
- office365 - 在浏览器(Edge、Firefox、Chrome ...)中打开 Excel 加载项时的延迟/冻结
- sql - 扳手 row_number() OVER ( PARTITION BY.. ORDER BY)