MongoClient $ in не работает с массивом int - PullRequest
0 голосов
/ 28 июня 2018

Я новичок в 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 голосов
/ 28 июня 2018

попробуйте использовать это

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}} Документ {{_ id = 5afce43ce1def619f8c591f3, местоположение = Пекин, версия = 1.2, платформа = 1.0}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...