Объяснение запроса mongo с условием OR

#mongodb #mongoose #mongodb-query

#mongodb #mongoose #mongodb-запрос

Вопрос:

У меня есть эти данные в моей базе данных

 { "_id" : ObjectId("5c89da093180684aba34c5b7"), "name" : "Allen", "age" : 24, "nicknames" : [ "kanky" ], "siblings" : [ ] }
{ "_id" : ObjectId("5c89da4b3180684aba34c5b8"), "name" : "Sonata", "age" : "30" }
{ "_id" : ObjectId("5c89da8f3180684aba34c5b9"), "name" : "Kaushik", "age" : "20" }
{ "_id" : ObjectId("5c89da8f3180684aba34c5ba"), "name" : "Stuart", "age" : "24" }
{ "_id" : "5c89da093180684aba34c5b7", "name" : "Allen", "age" : 24 }
  

Когда я запускаю этот запрос db.people.find({$or: [{name:"Allen"}, {age:24}]}) , он не выдает запись с, name : Stuart которая имеет age : 24 .

Но если я выполняю этот запрос db.people.find({$or: [{name:"Stuart"}, {age:24}]}) , он работает так, как задумано.

Кто-нибудь может объяснить, как это работает? Я начинаю с mongodb, поэтому, возможно, это очень простой вопрос.

Спасибо

Ответ №1:

У вас разные типы схем для age в разных документах. Для Аллена вы используете числовой тип данных для определения возраста, а для Стюарта вы используете строку для хранения возраста. Я думаю, что в этом проблема.

Попробуйте запустить это:-

 db.people.find({$or: [{name:"Allen"}, {age: "24" }]})
  

Вы получите Stuart с этим запросом. Я не вижу здесь ничего другого неправильного, за исключением разных типов данных.

Комментарии:

1. Да, это была проблема. Знаете ли вы, как, даже если я передаю age в качестве строки в запросе, он возвращает запись для чисел также там, где обратное неверно?

2. Я не думаю, что это так. Пожалуйста, попробуйте выполнить запрос только с возрастом, установленным в строку 24, и он не должен возвращать Allen

3. Моя ошибка. Это не так. Я был неосторожен и пропустил условие OR. Спасибо за вашу помощь.