问题描述
{
"_id": "5f6b45ad73cac785f0e7504c","user_id": "zzzz","survey_id": "40","questionList": [
{
"isDelete": 1,"choices": [
{
"_id": "5f6b45ad73cac785f0e75068","name": "Choice1","value": "","score": 12,"disqualifier": "true"
},{
"_id": "5f6b45ad73cac785f0e75067","name": "choice2","score": 21,{
"_id": "5f6b45ad73cac785f0e75066","name": "choice3","disqualifier": "false"
}
],"_id": "5f6b45ad73cac785f0e75065","type": "mcq","name": "Multi Choice","value": "choice2","isMandatory": "true"
},{
"isDelete": 0,"choices": [
{
"_id": "5f6b45ad73cac785f0e75064","name": "option1",{
"_id": "5f6b45ad73cac785f0e75063","name": "option2","disqualifier": "false"
},{
"_id": "5f6b45ad73cac785f0e75062","name": "option3","score": 33,"_id": "5f6b45ad73cac785f0e75061","type": "dropdown","name": "dropdown","value": "option2","isMandatory": "true"
}
我需要在file_id和user_id上放置一个文件管理器,并且需要选择QUESTIONLIST中isDelete为1的所有对象。我确实尝试了太多稀释,但似乎没有任何作用,还是我错了? 这就是我尝试过的一切
await surveyfinal.find({$and:[{survey_id:req.body.survey_id},{user_id:req.body.user_id},{questionList:{$elemmatch:{isDelete:1}}}]})
await surveyfinal.find({user_id:req.body.user_id},{questionList:{$elemmatch:{isDelete:1}}} )
await surveyfinal.find({$and:[{user_id:req.body.user_id},{survey_id:req.body.survey_id},{"questionList.isDelete":1} ]})
解决方法
如果您的目标是仅从questionList
数组中获取与给定survey_id
和user_id
匹配的文档的相关数组元素,则可以使用以下聚合来实现:
db.collection.aggregate([
{
$match: {
"user_id": "zzzz","survey_id": "40","questionList.isDelete": 1
}
},{
$project: {
questionList: {
$filter: {
input: "$questionList",as: "questionList",cond: {
$eq: [ "$$questionList.isDelete",1 ]
}
}
}
}
}
])
查看我在mongoplayground上创建的示例。