模式是:計數文檔匹配多個陣列標準
{
"_id" : ObjectId("594b7e86f59ccd05bb8a90b5"),
"_class" : "com.notification.model.entity.Notification",
"notificationReferenceId" : "7917a5365ba246d1bb3664092c59032a",
"notificationReceivedAt" : ISODate("2017-06-22T08:23:34.382+0000"),
"sendTo" : [
{
"userReferenceId" : "check",
"mediumAndDestination" : [
{
"medium" : "API",
"status" : "UNREAD"
}
]
}
]
}
{
"_id" : ObjectId("594b8045f59ccd076dd86063"),
"_class" : "com.notification.model.entity.Notification",
"notificationReferenceId" : "6990329330294cbc950ef2b38f6d1a4f",
"notificationReceivedAt" : ISODate("2017-06-22T08:31:01.299+0000"),
"sendTo" : [
{
"userReferenceId" : "check",
"mediumAndDestination" : [
{
"medium" : "API",
"status" : "UNREAD"
}
]
}
]
}
{
"_id" : ObjectId("594b813ef59ccd076dd86064"),
"_class" : "com.notification.model.entity.Notification",
"notificationReferenceId" : "3c910cf5fcec42d6bfb78a9baa393efa",
"notificationReceivedAt" : ISODate("2017-06-22T08:35:10.474+0000"),
"sendTo" : [
{
"userReferenceId" : "check",
"mediumAndDestination" : [
{
"medium" : "API",
"status" : "UNREAD"
}
]
},
{
"userReferenceId" : "hello",
"mediumAndDestination" : [
{
"medium" : "API",
"status" : "READ"
}
]
}
]
}
我想計數基於statusList用戶通知這是一個List
。我用mongoOperations進行查詢:
Query query = new Query();
query.addCriteria(Criteria.where("sendTo.userReferenceId").is(userReferenceId)
.andOperator(Criteria.where("sendTo.mediumAndDestination.status").in(statusList)));
long count = mongoOperations.count(query, Notification.class);
我知道我做錯了,因爲我越來越算作1,當我查詢用戶參考ID hello
和statusList與作爲UNREAD
單個元素。
如何對數組元素執行聚合查詢?
嗯是的「查詢」是不正確的,但是,從你的問題,你也不清楚你想在這裏「計數」的事情。 A.匹配的文檔B.匹配的'「sendTo」'中的項目總數,或者C.匹配兩個條件的所有'「mediumAndDestination」'中的項目總數?因此,您樣本中的文檔** none **與條件組合相匹配,但也不清楚這是否基本上是您要求的。 –
@NeilLunn說,我想統計一個用戶通知是'UNREAD'。用戶由'userReferenceId'標識,通知狀態由'status'標識。 –
我列表中的A,B或C中哪一個是「用戶通知」?是「A」文件嗎?你是否期待'0'的正確查詢?因爲就我所見,這裏沒有任何文件符合該標準。 –