我有多个嵌套对象和列表,如下所示
{
"_id": "5a76be26ca96e22f08af2a19",
"testId": "123",
"testName": "summerTest",
"subjects": [
{
"subjectName": "Maths",
"testDetails": [
{
"testNumber": "0001",
"startTime": "2/18/18 13:30",
"endTime": "2/18/18 13:30",
"testDuriation": "01:00:00",
"questions": [
{...}
]
},
{
"testNumber": "0002",
"startTime": "2/18/18 13:30",
"endTime": "2/18/18 13:30",
"testDuriation": "01:00:00",
"questions": [
{...}
]
}
]
}
我只想选择testNumber 0002。在我的快递中使用mongoclient。
collection.find({ "testId": "123", "subjects.subjectName": "Maths", "subjects.testDetails.testNumber": "0002" }).toArray(function (err, data) {}..
但它会返回整个TestId 123文档,任何人都可以帮助我。感谢
答案 0 :(得分:0)
通过查找,您始终会返回整个文档,因此您需要添加投影才能显示所需内容。
顺便说一下,在find过滤器中有一个错误,因为如果你只想过滤具有特定subjects.subjectName和subjects.testDetails.testNumber的集合,你需要使用$ elemMatch(https://docs.mongodb.com/manual/reference/operator/query/elemMatch/)。如果你不这样做,它将返回所有文档,在subject数组中有一个元素包含第一个属性,另一个元素包含第二个属性。
答案 1 :(得分:0)
将可用
db.collection.aggregate([
{$unwind : '$subjects'},
{$project : {'_id': 0 , 'array' : '$subjects.testDetails'}},
{$unwind : '$array'},
{$match: {'array.testNumber' : '0002' }}
])