#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. Спасибо за вашу помощь.