如何在MongoDb中查询嵌入式文档?
我的文档在MongoDB中包含了将近七个级别的文档,现在我需要编写一个查询来检查所有条件,比如,如何在MongoDb中查询嵌入式文档?,mongodb,mongodb-query,Mongodb,Mongodb Query,我的文档在MongoDB中包含了将近七个级别的文档,现在我需要编写一个查询来检查所有条件,比如,subject=java,topic=oops,level=l1,complexity=easy,questionType=mcq,根据这个要求显示集合中的所有问题。 任何人请帮助我,提前谢谢 { "_id" : ObjectId("59f71b4d0bec333e1707a8d3"), "_class" : "com.wipro.domain.QuestionBank", "
subject=java,topic=oops,level=l1,complexity=easy,questionType=mcq
,根据这个要求显示集合中的所有问题。
任何人请帮助我,提前谢谢
{
"_id" : ObjectId("59f71b4d0bec333e1707a8d3"),
"_class" : "com.wipro.domain.QuestionBank",
"subjectLists" : [
{
"subject" : "java",
"topicList" : [
{
"topic" : "oops",
"levelList" : [
{
"level" : "l1",
"complexityList" : [
{
"complexity" : "easy",
"questionTypeList" : [
{
"questionType" : "mcq",
"questionList" : [
{
"_id" : "2",
"question" : "2st question",
"options" : [
{
"a" : "1",
"b" : "2",
"c" : "3",
"d" : "4"
}
],
"correctAnswer" : "b",
"marksAlloted" : "1"
}
]
}
]
}
]
}
]
}
]
}
]
}
{
"_id" : ObjectId("59f71b700bec333e1707a8d4"),
"_class" : "com.wipro.domain.QuestionBank",
"subjectLists" : [
{
"subject" : "java",
"topicList" : [
{
"topic" : "threds",
"levelList" : [
{
"level" : "l3",
"complexityList" : [
{
"complexity" : "hard",
"questionTypeList" : [
{
"questionType" : "mcq",
"questionList" : [
{
"_id" : "3",
"question" : "3rd question",
"options" : [
{
"a" : "1",
"b" : "2",
"c" : "3",
"d" : "4"
}
],
"correctAnswer" : "b",
"marksAlloted" : "1"
}
]
}
]
}
]
}
]
}
]
}
]
}
以下带投影的查询仅列出问题: 注意:请在下面传递您的查询:
db.questions.findOne({}, {'subjectLists.topicList.levelList.complexityList.questionTypeList.questionList':1})
以下带投影的查询仅列出问题: 注意:请在下面传递您的查询:
db.questions.findOne({}, {'subjectLists.topicList.levelList.complexityList.questionTypeList.questionList':1})
你可以试试这个脚本
db.getCollection('document').aggregate([
{
$match:{
$and: [
{"subjectLists.subject": "java"}
,{"subjectLists.topicList.topic": "oops"}
,{"subjectLists.topicList.levelList.level": "l1"}
,{"subjectLists.topicList.levelList.complexityList.complexity": "easy"}
,{"subjectLists.topicList.levelList.complexityList.questionTypeList.questionType": "mcq"}
]
}
},
{
$unwind: "$subjectLists"
}
,{
$unwind: "$subjectLists.topicList"
}
,{
$unwind: "$subjectLists.topicList.levelList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList.questionTypeList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList.questionTypeList.questionList"
},
{
$project: {
"questionList": "$subjectLists.topicList.levelList.complexityList.questionTypeList.questionList"
}
}
,
{
$replaceRoot: { newRoot: "$questionList" }
}
])
结果:
{
"_id" : "2",
"question" : "2st question",
"options" : [
{
"a" : "1",
"b" : "2",
"c" : "3",
"d" : "4"
}
],
"correctAnswer" : "b",
"marksAlloted" : "1"
}
你可以试试这个脚本
db.getCollection('document').aggregate([
{
$match:{
$and: [
{"subjectLists.subject": "java"}
,{"subjectLists.topicList.topic": "oops"}
,{"subjectLists.topicList.levelList.level": "l1"}
,{"subjectLists.topicList.levelList.complexityList.complexity": "easy"}
,{"subjectLists.topicList.levelList.complexityList.questionTypeList.questionType": "mcq"}
]
}
},
{
$unwind: "$subjectLists"
}
,{
$unwind: "$subjectLists.topicList"
}
,{
$unwind: "$subjectLists.topicList.levelList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList.questionTypeList"
}
,{
$unwind: "$subjectLists.topicList.levelList.complexityList.questionTypeList.questionList"
},
{
$project: {
"questionList": "$subjectLists.topicList.levelList.complexityList.questionTypeList.questionList"
}
}
,
{
$replaceRoot: { newRoot: "$questionList" }
}
])
结果:
{
"_id" : "2",
"question" : "2st question",
"options" : [
{
"a" : "1",
"b" : "2",
"c" : "3",
"d" : "4"
}
],
"correctAnswer" : "b",
"marksAlloted" : "1"
}
您希望得到什么样的输出/查询?您需要什么样的查询?您只需调用
db.collection.find({“subjectlist.subject”:“java”},{“subjectlist.topicList.levelList.complexityList.questionTypeList.questionList”:1})
即可返回所有匹配subject=java
subject=java,topic=oops,level=l1,complexity=easy,questionType=mcq基于此要求显示集合中的所有问题。您希望得到什么输出/查询?按您需要的查询?您只需调用db.collection.find({“subjectlist.subject”:“java”},{“subjectlist.topicList.levelList.complexityList.questionTypeList.questionList”:1})
即可返回所有匹配subject=java
subject=java,topic=oops,level=l1,complexity=easy,基于此要求的questionType=mcq显示集合中的所有问题。subject=java,topic=oops,level=l1,complexity=easy,questionType=mcq基于此要求显示集合中的所有问题。我进行了更新。我正在尝试运行该脚本,但遇到此错误,“errmsg”:异常:无法识别的管道阶段名称:“$replaceRoot”“,您的mongodb版本是什么$replaceRoot随3.4版而来。删除此部分并重试。是的,以前我的mongo版本3.2现在我升级了,它工作得很好。非常感谢。subject=java,topic=oops,level=l1,complexity=easy,questionType=mcq基于此要求显示集合中的所有问题。我进行了更新。我正在尝试运行该脚本,但收到错误“errmsg”:“异常:无法识别的管道阶段名称:'$replaceRoot',您的mongodb版本是什么$replaceRoot随3.4版而来。删除此部分并重试。是的,以前我的mongo版本3.2现在我升级了,它工作得很好。非常感谢。@sarslan。