Vor kurzem benutze ich MongoDB mit Mongoose auf Nodejs.
Wenn ich die Model.find-Methode mit $or
Bedingung und _id
Feld verwende, funktioniert Mongoose nicht richtig.
Das funktioniert nicht:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Übrigens, wenn ich den Teil '_id' entferne, funktioniert das!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Und in der MongoDB-Shell funktionieren beide ordnungsgemäß.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Ich bitte alle, die Sprache und die Versprechen von Mongoose anstelle von Rückrufen zu verwenden:
Lesen Sie mehr über Mungo-Abfragen .
quelle
Laut mongoDB-Dokumentation: "... Damit MongoDB Indizes zum Auswerten eines $ oder Ausdrucks verwenden kann, müssen alle Klauseln im $ oder Ausdruck von Indizes unterstützt werden."
Fügen Sie also Indizes für Ihre anderen Felder hinzu, und es wird funktionieren. Ich hatte ein ähnliches Problem und das löste es.
Weitere Informationen finden Sie hier: https://docs.mongodb.com/manual/reference/operator/query/or/
quelle
quelle