2010-08-31 3 views

Répondre

24

Les personnes sur #mongodb ont été utiles. L'API JS ne supporte actuellement pas cela, mais vous pouvez utiliser votre propre identifiant. Pour générer un identifiant "normal", faites _id: new ObjectId(). Donc l'exemple dans ma question serait:

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

Merci d'être revenu pour répondre à votre propre question. Très appréciée! –

+0

dans mon cas particulier en utilisant node-mongodb-native, il était 'message._id = new mongodb.ObjectID()' – slf

0

Maintenant, le mongo native js api le supporte. Vous pouvez obtenir le dernier id comme ceci:

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

insert définit la propriété _id sur l'objet inséré, mais il semble que vous devez attendre l'objet pour revenir. La meilleure documentation que j'ai trouvé pour cela est (malheureusement) dans le code source:

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

+0

n'est pas sûr déprécié maintenant? ne sommes-nous pas censés utiliser 'journal' ou' w'? – slf

+0

Pouvez-vous s'il vous plaît lien vers la documentation où nous pouvons vérifier cela? En outre, qu'est-ce que vous dites exactement, que insert modifie la ligne pour ajouter le _id? Ou la ligne est-elle renvoyée au rappel? –

+0

Vous avez oublié le second argument de la fonction de rappel, voir [doc api] (https://github.com/mongodb/node-mongodb-native#insert). –

0

Si vous insérez les données comme ceci:

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); 
    }); 

Ensuite, vous pouvez saisir le _id comme celui-ci : console.log ("ceci est l'id pour le nouveau todo." + user.id);

1

Si vous exécutez

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

il retourne

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

Vous pouvez obtenir vos identifiants ainsi que tous les objets insérés à travers:

ret.ops[0]._id 

ou droit

ret.insertedIds[0] 
Questions connexes