我的收藏中有这两个文件:
{
"_id" : ObjectId("5722042f8648ba1d04c65dad"),
"companyId" : ObjectId("570269639caabe24e4e4043e"),
"applicationId" : ObjectId("5710e3994df37620e84808a8"),
"steps" : [
{
"id" : NumberLong(0),
"responsiveUser" : "57206f9362d0260fd0af59b6",
"stepOnRejection" : NumberLong(0),
"notification" : "test"
},
{
"id" : NumberLong(1),
"responsiveUser" : "57206fd562d0261034075f70",
"stepOnRejection" : NumberLong(1),
"notification" : "test1"
}
]
}
{
"_id" : ObjectId("5728f317a8f9ba14187b84f8"),
"companyId" : ObjectId("570269639caabe24e4e4043e"),
"applicationId" : ObjectId("5710e3994df37620e84808a8"),
"steps" : [
{
"id" : NumberLong(0),
"responsiveUser" : "57206f9362d0260fd0af59b6",
"stepOnRejection" : NumberLong(0),
"notification" : "erter"
},
{
"id" : NumberLong(1),
"responsiveUser" : "57206f9362d0260fd0af59b6",
"stepOnRejection" : NumberLong(1),
"notification" : "3232"
}
]
}
现在,我正试图从内部文档中获取最大 _id
和id
等于0 的文档steps
数组。我还有一个投影,应该只显示 匹配元素的id
而不是其他内容。
这是我的问题:
collection
.find(new Document("companyId", companyId)
.append("applicationId", applicationId)
.append("steps",
new Document("$elemMatch",
new Document("id", 0))))
.sort(new Document("_id", 1))
.limit(1)
.projection(new Document("steps.id", 1)
.append("_id", 0));
它返回:
Document{{steps=[Document{{id=0}}, Document{{id=1}}]}}
为什么它返回2个文件而不是1?
结果应如下所示:
Document{{id=0}}
我在这里缺少什么?我知道这是基本的,但我真的无法在这里发现我的错误。
答案 0 :(得分:1)
您的查询文档告诉Mongo将这些文档返回到'步骤'数组中有一个[[['50', '50', '90'], ['50', '90', '90'], 'red'],
的文档。你不是要告诉Mongo只返回那个领域。你可以在投影文档中使用id: 0
来获得你想要的东西(我在Mongo shell语法中写这个,因为我不太熟悉Java语法):
$elemMatch