gpt4 book ai didi

node.js - Mongodb:仅查找与 mongodb 中的条件匹配的数组对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:49 24 4
gpt4 key购买 nike

我有一个收藏。我只想获取 user_surveys 数组中 survey_delete_flag 为 0

的对象
  {
"_id":"5d38395531335242147f9341",
"user_status":"Active",
"user_surveys":[
{
"survey_id":"1563965898505",
"survey_name":"Deepak Survey",
"survey_delete_flag":0,
"survey_status":"Active"
},
{
"survey_id":"1563971438976",
"survey_name":"Infra Survey",
"survey_delete_flag":0,
"survey_status":"Active"
},
{
"survey_id":"1564059777417",
"survey_name":"Infra2 Survey",
"survey_delete_flag":1,
"survey_status":"Active"
}
]
}

我正在使用 mongodb npm 库并尝试如下所示,但它仅返回与 _id 匹配的所有文档。

  let query = {_id: new objectId(authenication.loggedUser.user_id)}
let subquery= {user_surveys: {$elemMatch: {survey_delete_flag:0}}}
survey_db.collection('user_registration').findOne(query,subquery,(err,
doc) => {
if (!err) {
console.log(doc)
res.json({ res: doc.user_surveys })
} else {
return res.json({ err: err })
}
}

我期待这样的结果

[
{
"survey_id":"1563965898505",
"survey_name":"Deepak Survey",
"survey_delete_flag":0,
"survey_status":"Active"
},
{
"survey_id":"1563971438976",
"survey_name":"Infra Survey",
"survey_delete_flag":0,
"survey_status":"Active"
}
]

最佳答案

使用普通的 findOne 您无法按照您想要的方式获得结果。为此,您必须使用聚合。

像这样

const query = [
{
$match: { _id:new objectId(authenication.loggedUser.user_id) }
},
{
$unwind: "$user_surveys"
},
{
$match: { "user_surveys.survey_delete_flag": 0 }
},
{
$replaceRoot: { newRoot: "$user_surveys" }
}
]

survey_db.collection('user_registration').aggregate(query,(err, doc) => {
if (!err) {
console.log(doc)
res.json({ res: doc.user_surveys })
} else {
return res.json({ err: err })
}
})

请参阅此以获得更多帮助:https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/

关于node.js - Mongodb:仅查找与 mongodb 中的条件匹配的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com