我是mongodb的新手,我有一个这样的测试集合:
{ "_id" : ObjectId("5afce40ae1def619f8c591f1"), "location" : "shanghai", "version" : "1.14", "platform" : 1 }
{ "_id" : ObjectId("5afce43ce1def619f8c591f3"), "location" : "beijing", "version" : "1.2", "platform" : 1 }
在外壳中效果很好
db.test.aggregate([{$match: { 'location':{ $in:['beijing','shanghai'] } , 'platform':{ $in:[1]} }}])
它确实可以像这样在Java MongoClient中工作:
List<Bson> filter = Arrays.asList(
Document.parse("{$match: { 'location':{ $in:['beijing','shanghai'] } }}")
);
AggregateIterable<Document> doc = mongoClient.getDatabase(db).getCollection(collectionName).aggregate(filter);
当$ in使用int数组时,它根本不起作用并返回一个空数组:
List<Bson> filter = Arrays.asList(
Document.parse("{$match: { 'location':{ $in:['beijing','shanghai'] } , 'platform':{ $in:[1]} }}")
);
AggregateIterable<Document> doc = mongoClient.getDatabase(db).getCollection(collectionName).aggregate(filter);
答案 0 :(得分:1)
尝试使用此
MongoCollection<Document> doc = db.getCollection("TestCollection1");
List<Bson> filter = Arrays.asList(
Document.parse("{$match: { 'location':{ $in:['beijing','shanghai'] } , 'platform':{ $in:[1]} }}")
);
AggregateIterable<Document> doc2= doc.aggregate(filter);
Iterator iterator = doc2.iterator();
while(iterator.hasNext()){
Document plant = (Document) iterator.next();
System.out.println(plant);
}
输出
文档{{__id = 5afce40ae1def619f8c591f1,位置=上海,版本= 1.14,平台= 1.0}} 文档{{__ = 5afce43ce1def619f8c591f3,位置=北京,版本= 1.2,平台= 1.0}}