簡體   English   中英

MongoDB Java驅動程序如何在投影中使用過濾器

[英]Mongodb java driver how to use filter in projection

我有此查詢在mongodb中正常工作:

db.document.aggregate([
{$match: { $and: [ 
    { type:ObjectId('abc') }, 
    { metadata: { $elemMatch: { metadataType: ObjectId("abc"), value: DBRef("tag", ObjectId("abc"))}}},
    { metadata: { $elemMatch: { metadataType: ObjectId("abc"), value: "abc"}}}
    ] }
},
{$project: {
      metadata: {
        $filter: {
            input: "$metadata",
            as: "metadata",
            cond: { $or: [
                {$eq: [ "$$metadata.metadataType", ObjectId("abc") ] },
                {$eq: [ "$$metadata.metadataType", ObjectId("abc") ] }]}
          }
        }
      }

如何使用mongodb驅動程序在JAVA中做到這一點? 我可以執行$ match階段,但不知道如何使用$ filter進行數組的$ project階段。

我可以使用Document.parse()(如此處建議的那樣: https : //groups.google.com/forum/#!topic/ mongodb-user/ W4wiPYk0Gec ),但我認為這很丑陋。 或者我可以使用類似這里的內容: Spring Data MongoDb是否支持$ filter數組聚合運算符? 但這也不太漂亮。

基本上我的問題是:在較新版本的mongodb驅動程序中,有沒有一種好的/更好的方法? (類似於spring mongodb的第三個答案: 查詢與mongodb中的條件匹配的文檔及其所有子文檔(使用spring)

*****編輯

更准確地說:有沒有辦法像這里的比賽部分那樣:

AggregateIterable<Document> output = document.aggregate(
                Arrays.asList(
                        Aggregates.match(and(
                                eq("type", new ObjectId("abc")),
                                elemMatch("metadata", and(eq("metadataType", language), eq("value", abc))),
                                elemMatch("metadata", and(eq("metadataType", workClusterName), eq("value", "abc")))
                        )),
                        Aggregates.project(filterHOWTO)
                ));

您可以使用MongoTemplate#aggregate使用MongoTemplate#aggregateMongoTemplate並將其傳遞給spring org.springframework.data.mongodb.core.query.Query對象,該對象是通過org.springframework.data.mongodb.core.query.Criteria構建器構建的圖案。 Criteria對象具有elemMatch等方法。在Criteria對於您在此處發布的查詢的各個方面都有方法-您只需要學習如何在Criteria構建器中將它們鏈接在一起即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM