2016-01-04 2 views
1

У меня есть два документа в формате JSON на коллекции МонгоНайти запрос в MongoDB из указанного массива

{"_id" : ObjectId("asdf"), "employee" : {"name": "Bob"}} 
{"_id" : ObjectId("1234"), "employee" : {"name": "Rob"}} 

Все я просто хотел сделать простой запрос получить имя сотрудника из моего массива.

Я попытался

db.myCollection.find({"employee.name": "Bob"}) 

Это работает и возвращает только один документ.

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

Не работает. Doesnt ничего возвращать

db.myCollection.find({"employee.name": "Bob", "Rob"}) 

ошибка синтаксиса

db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} }) 

не работает. Ничего не возвращает

Я знаю, что это очень простой запрос. Но не смог понять синтаксис.

ответ

1

Вы должны использовать $in оператор см documentation

db.myCollection.find({"employee.name":{$in:["Bob","Rob"]}}) 

Оператор $all не возвращает никаких документов, поскольку он выбирает документы, в которых значение поля представляет собой массив, содержащий все указанные элементы.Следующая запись будет удовлетворять это условие:

{"_id" : ObjectId("asdf"), "employee" : {"name": ["Bob","Rob"]}} 

выше запись также будет возвращена этим запросом:

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

Наконец, запрос ниже бросает недействительная синтаксическая ошибка в {"employee.name": "Bob", "Rob"} не является допустимым JSON \ BSON документ:

db.myCollection.find({"employee.name": "Bob", "Rob"}) 
+0

Работал как шарм :) –

2

Попробуйте использовать $in оператор

запрос: db.myCollection.find({"employee.name": { $in: ["Bob", "Rob"] }})

Для вариантов вы пробовали,

db.myCollection.find({"employee.name": "Bob"}) 

Это вернет записи с именем, имеющие "Боб", так что поэтому он возвращает только одну запись.

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

Для этого варианта мы предоставили [ «Боб», «Rob»] для сопоставления стоимости, которая на самом деле есть и массив, поэтому он будет возвращать записи с тем же массивом в имени.

db.myCollection.find({"employee.name": "Bob", "Rob"}) 

Для этого варианта, как Жако сказал, что это недопустимый формат JSON.

db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} }) 

Эта опция будет пытаться найти записи со значением поля имени как массив, так что массив значений содержит все значения, приведенные в $all

0

Согласно упомянутому выше описанию в качестве альтернативного решения к нему, пожалуйста, попробуйте запустить следующий запрос в предположении, что все документы должны быть неправдоподобным

db.getCollection ('MyCollection') находим ({}, {_ ID: 0, 'employee.name': 1}).

Этот запрос извлекает все документы из коллекции с использованием проекция документ для получения конкретных полей в результирующем

для получения более подробной относительно MongoDB Дайте описание проекции документа см следующую документацию, как указано в следующей ссылке

https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/

Смежные вопросы