为什么我要获得未包含在投影中的文件?

时间:2016-05-03 11:52:29

标签: java arrays mongodb mongodb-query

我的收藏中有这两个文件:

{ 
    "_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" 
        }
    ]
}

现在,我正试图从内部文档中获取最大 _idid 等于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}}

我在这里缺少什么?我知道这是基本的,但我真的无法在这里发现我的错误。

1 个答案:

答案 0 :(得分:1)

您的查询文档告诉Mongo将这些文档返回到'步骤'数组中有一个[[['50', '50', '90'], ['50', '90', '90'], 'red'], 的文档。你不是要告诉Mongo只返回那个领域。你可以在投影文档中使用id: 0来获得你想要的东西(我在Mongo shell语法中写这个,因为我不太熟悉Java语法):

$elemMatch