Ich habe eine MongoDB-Datenbank, die ich mit NodeJS abfrage, ich habe eine Sammlung "service" mit 2 Feldern, die ein dbref zu zwei anderen Sammlungen enthalten ("appareil" & "bus"), so typischerweise eine Position doc ist ähnlich wie diese:Ich kann MongoDB nicht mit find in NodeJS abfragen
{
"_id" : ObjectId("..."),
"idService" : ...,
"codeRoute" : ...,
"codeCh" : "...",
"codeConv" : "...",
"codeLigne" : "...",
"date" : ISODate("..."),
"appareil" : {
"_id" : ObjectId("..."),
"_class" : "com.transtu.documents.Appareil",
"reference" : "...",
"societe" : DBRef("societe", ObjectId("..."))
},
"bus" : {
"_id" : ObjectId("..."),
"_class" : "com.transtu.documents.Bus",
"code" : "...",
"immatriculation" : "...",
"reference" : "...",
"localisation" : {
"x" : ...,
"y" : ...
},
"societe" : DBRef("societe", ObjectId("..."))
}
}
ich den folgenden Code in NodeJS versucht, die "mongodb" NPM-Modul:
findService = {};
findService.date = 'ISODate(' + new Date(service.date).toISOString() + ')';
findService.appareil = {_id: 'new ObjectID(' + service.appareil._id + ')'};
findService.bus = {_id: 'new ObjectID(' + service.bus._id + ')'};
findService.codeCh = service.codeCh;
findService.codeConv = service.codeConv;
serviceCollection.find(findService).toArray(function (err, docs) {
if (err) {
console.error('error:............... ' + JSON.stringify(err));
} else {
//console.log('docs:............ ' + JSON.stringify(docs));
if (docs.length == 0) {
console.log('not found'); serviceCollection.insertOne(service, function (res, err) {
if (err) {
//console.error('err: ............: ' + JSON.stringify(err));
} else {
//console.log('res: **************: ' + JSON.stringify(res));
}
});
} else {
console.log('found');
console.log('docs: ****************************** ' + JSON.stringify(docs));
}
}
});
Dieser Code funktioniert nicht und ich bekomme immer „nicht gefunden "Antwort, aber mit dem Mongo-Client CMD fand ich einen Code, der für m arbeitete e:
db.service.find({"date": ISODate("..."), "codeCh": "...", "codeConv": "...", "appareil._id": ObjectId("..."), "bus._id" : ObjectId("...")}).pretty()
Das Ziel dieser Fund Abfrage ist die Eindeutigkeit einer Kombination aus 5 Feldern in der Service Sammlung, um sicherzustellen, ich so eine Verbindung Index versucht, fügte hinzu: didn
db.service.ensureIndex({date:1, appareil:1, bus:1, codeCh:1, codeConv:1}, { unique: true, dropDups: true })
aber es 't funktionieren auch ...
Wie kann ich eine Suchabfrage mit nur diesen 5 Feldern verarbeiten oder wie kann ich die Kombination dieser Felder in den Sammlungseinstellungen eindeutig machen?
Es geht nicht um die Konsolenmeldung, ich bekomme doppelte Dokumente in meiner Service-Sammlung, ich habe meinen Code trotzdem bearbeitet –