MongoClient $ in不适用于int数组

时间:2018-06-28 07:50:11

标签: mongodb mongodb-query mongodb-java

我是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);

1 个答案:

答案 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}}