Недавно я начал использовать MongoDB с Mongoose на Nodejs.
Когда я использую метод Model.find с $or
условием и _id
полем, Mongoose не работает должным образом.
Это не работает:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Кстати, если я удалю часть '_id', это ДЕЙСТВИТЕЛЬНО работает!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
И в оболочке MongoDB оба работают правильно.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Я умоляю всех использовать язык построителя запросов Mongoose и обещания вместо обратных вызовов:
Узнайте больше о запросах Mongoose .
источник
Согласно документации mongoDB: «... То есть, чтобы MongoDB использовала индексы для оценки выражения $ or, все предложения в выражении $ or должны поддерживаться индексами».
Так что добавьте индексы для других полей, и все заработает. У меня была аналогичная проблема, и это решило ее.
Вы можете прочитать больше здесь: https://docs.mongodb.com/manual/reference/operator/query/or/
источник
источник