2016-09-10 4 views
0

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?

Antwort

0

Wenn Sie Ihren Code sehen. Sie haben console.log('not found'); in Ihrem else Zustand. Also, wenn es keinen Fehler gibt, erhalten Sie not found in der console gedruckt. Ich denke, dass dein Code gut funktioniert.

serviceCollection.find(findService) 
    .toArray(function (err, docs) { 
     if (err) { 
      console.error('error:............... ' + JSON.stringify(err)); 
     } else { 
      console.log('not found');//this will print "not found" if there is no error. 
      //rest of the code 
     } 
    }); 

sollten Sie console.log('not found'); tun, während die Länge der docs überprüfen.

serviceCollection.find(findService) 
    .toArray(function (err, docs) { 
     if (err) { 
      console.error('error:............... ' + JSON.stringify(err)); 
     } else { 
      if (docs.length == 0) { 
       console.log('not found'); //this should be here 
       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)); 
      } 
     } 
    }); 
+0

Es geht nicht um die Konsolenmeldung, ich bekomme doppelte Dokumente in meiner Service-Sammlung, ich habe meinen Code trotzdem bearbeitet –

Verwandte Themen