Ostatnio zacząłem używać MongoDB z Mongoose na Nodejs.
Kiedy używam metody Model.find z $or
warunkiem i _id
polem, Mongoose nie działa poprawnie.
To nie działa:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Nawiasem mówiąc, jeśli usunę część „_id”, TO DZIAŁA!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
W powłoce MongoDB oba działają poprawnie.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Błagam wszystkich o używanie języka konstruktora zapytań Mongoose i obietnic zamiast wywołań zwrotnych:
Przeczytaj więcej o zapytaniach Mongoose .
źródło
Zgodnie z dokumentacją mongoDB: „... Oznacza to, że aby MongoDB używał indeksów do oceny $ lub wyrażenia, wszystkie klauzule w $ lub wyrażeniu muszą być obsługiwane przez indeksy”.
Więc dodaj indeksy dla innych pól i zadziała. Miałem podobny problem i to go rozwiązało.
Możesz przeczytać więcej tutaj: https://docs.mongodb.com/manual/reference/operator/query/or/
źródło
źródło