我是 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/