带有 $in 的 mongodb 聚合查询的 Java 代码

标签 java mongodb mongodb-query aggregation-framework mongodb-java

我是 mongodb 的新手,下面需要一个等效的 java 代码

db.asset.aggregate([{
            $unwind : '$asset'
        }, {
            $match : {
                'asset.status' : {
                    $in : ['1', '2', '3']
                },
                'asset.siteid' : {
                    $in : ['123']
                }
            }
        }
    ]).pretty()

我尝试了以下但没有帮助

    DBObject unwind = new BasicDBObject("$unwind", "$dp.asset");
    DBObject match  = BasicDBObjectBuilder.start().push("$match")
                  .push("dp.asset.status").add("$in", ['ACTIVE', 'LIMITEDUSE', 'OPERATING'])
                  .push("dp.asset.siteid").add("$in", ['BEDFORD']).get();

    AggregationOutput aggr = collection.aggregate(Arrays.asList(unwind, match));

注意:我使用的是 mongodb 3.4.1

最佳答案

不确定为什么在传递数组值时使用单引号。

传递值的正确语法是

 DBObject match  = BasicDBObjectBuilder.start().push("$match")
             .push("$dp.asset.status").add("$in", Arrays.asList("ACTIVE", "LIMITEDUSE", "OPERATING"))
             .push("$dp.asset.siteid").add("$in", Arrays.asList("BEDFORD")).get();

或者

DBObject match  = BasicDBObjectBuilder.start().push("$match")
             .push("$dp.asset.status").add("$in", new String[]{"ACTIVE", "LIMITEDUSE", "OPERATING"})
             .push("$dp.asset.siteid").add("$in", new String[]{"BEDFORD"}).get();

对于 3.x 驱动程序,您应该使用文档。

Document unwind = new Document("$unwind", "$dp.asset");
Document match  = new Document("$match", new Document("$dp.asset.status", new Document("$in", new String[]{"ACTIVE", "LIMITEDUSE", "OPERATING"})).
             append("$dp.asset.siteid", new Document("$in", new String[]{"BEDFORD"})));

Mongo 查询代码。

 Document unwind = new Document("$unwind", "$asset");
 Document match  = new Document("$match", new Document("$asset.status", new Document("$in", new String[]{"1", "2", "3"})).
         append("$asset.siteid", new Document("$in", new String[]{"123"})));

关于带有 $in 的 mongodb 聚合查询的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41377962/

相关文章:

java - MongoDB + Spring 集成

java - 如何使用 `Comparator` 接口(interface)对二维数组进行排序?

java - Android 将文件写入不同的应用程序文件夹

mongodb - 所有 Mongoose 事件是什么,它们在哪里记录?

ruby-on-rails - 在 Rails+Mongoid 中 find_or_create 创建的重复记录

database - 计算符合条件的数组元素个数

node.js - 在mongodb的聚合中调用函数?

mongodb - 我如何在 mongodb 的数组中找到文本搜索

java - 在 Java 中评估后缀表达式

java - 如何从Java Maps(多层关联数组)中获取键、值