繁体   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