2010-08-31 17 views

Antwort

24

Die Leute auf #mongodb waren hilfreich. Die JS-API unterstützt dies derzeit nicht, aber Sie können Ihre eigene ID verwenden. Um eine "normale" ID zu generieren, verwende _id: new ObjectId(). So das Beispiel in meiner Frage wäre:

id = new ObjectId(); 
obj = {a: 1, b: 2, _id: id}; 
db.foo.insert(obj); 
+4

Danke, dass du zurückkommst, um deine eigene Frage zu beantworten. Sehr geschätzt! –

+0

in meinem speziellen Fall mit node-mongodb-native war es "message._id = new mongodb.ObjectID()' – slf

0

nun die Mongo nativen js api dies unterstützt. Sie können die letzte id wie diese:

collection.insert(line, {w : 1}, function(err, inserted) { 
    inserted[0]._id 
} 

insert setzt die _id Eigenschaft auf dem Objekt eingefügt, aber es sieht aus wie Sie warten, bis das Objekt zurückzukehren. Die beste Dokumentation ich dafür gefunden habe, ist (leider) im Quellcode:

https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js

+0

ist nicht sicher jetzt veraltet? sollen wir nicht 'journal' oder' w' verwenden? – slf

+0

Können Sie bitte auf die Dokumentation verweisen, wo wir dies überprüfen können? Außerdem, was genau sagst du, dass Einfügen die Zeile ändert, um die _id hinzuzufügen? Oder wird die Leitung an den Rückruf zurückgegeben? –

+0

Sie haben das zweite Argument der Callback-Funktion vergessen, siehe [api docs] (https://github.com/mongodb/node-mongodb-native#insert). –

0

Wenn Sie die Daten wie folgt ein:

var temptodo = new User({ 
     title: data.todo.text, 
     email: socket.handshake.email, 
     created_at: Date.now(), 
     completed: false, 
     sid: socket.handshake.sid 
    }); 
    temptodo.save(function(error, User){ 

      console.log("this is the id for the new todo. "+User._id); 
      console.log('Todo saved in database with sid: '+socket.handshake.sid); 
    }); 

Dann können Sie die _id wie diese greifen : console.log ("Dies ist die ID für die neue todo." + User._id);

1

Wenn Sie laufen

db.collection("venues").insert({name: "test3", FSid: "test3"}, function(err, ret) { 
    console.log(ret) 
}) 

es gibt

{ result: { ok: 1, n: 1 }, 
    ops: [ { name: 'test3', FSid: 'test3', _id: 57cb0a1162cecfe636df6fc1 } ], 
    insertedCount: 1, 
    insertedIds: [ 57cb0a1162cecfe636df6fc1 ] } 

So können Sie Ihre IDs zusammen mit allen eingefügten Objekten durchkommen:

ret.ops[0]._id 

oder gerade

ret.insertedIds[0] 
Verwandte Themen