2010-08-31 42 views

Trả lời

24

Những người trên #mongodb hữu ích. JS API hiện không hỗ trợ điều này, nhưng bạn có thể sử dụng id của riêng bạn. Để tạo id "bình thường", hãy _id: new ObjectId(). Vì vậy, ví dụ trong câu hỏi của tôi sẽ là:

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

Cảm ơn bạn đã quay lại để trả lời câu hỏi của riêng bạn. Nhiều đánh giá cao! –

+0

trong trường hợp cụ thể của tôi bằng cách sử dụng nút-mongodb-native nó là 'message._id = new mongodb.ObjectID()' – slf

0

Bây giờ , bản gốc mong muốn hỗ trợ điều này. Bạn có thể lấy id cuối cùng như thế này:

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

insert thiết đặt thuộc tính _id trên đối tượng chèn, nhưng có vẻ như bạn phải đợi cho đối tượng trở lại. Các tài liệu tốt nhất mà tôi đã tìm thấy cho điều này là (không may) trong mã nguồn:

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

+0

không được chấp nhận an toàn ngay bây giờ? không phải chúng ta đang sử dụng 'journal' hay' w'? – slf

+0

Bạn có thể liên kết với tài liệu mà chúng tôi có thể xác minh điều này không? Ngoài ra, chính xác những gì bạn đang nói, mà chèn sửa đổi dòng để thêm _id? Hoặc là đường truyền lại cho cuộc gọi lại? –

+0

Bạn quên đối số thứ hai của hàm gọi lại, xem [tài liệu api] (https://github.com/mongodb/node-mongodb-native#insert). –

0

Nếu bạn chèn dữ liệu như thế này:

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

Sau đó, bạn có thể lấy các _id như thế này : console.log ("đây là id cho việc cần làm mới" + User._id);

1

Nếu bạn chạy

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

nó trả

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

Vì vậy, bạn có thể nhận được id của bạn cùng với tất cả các đối tượng chèn qua:

ret.ops[0]._id 

hoặc thẳng

ret.insertedIds[0] 
Các vấn đề liên quan