MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

mongoDB:Tạo một ObjectId cho mỗi phần tử con mới được thêm vào trường mảng

Không phải là mongodb chuyên gia nhưng, nếu tôi hiểu bạn chính xác, bạn muốn trường _id của tài liệu con được chèn tự động.

Tôi đã tạo threads db và sau đó chèn message đầu tiên trong messages bộ sưu tập bằng cách sử dụng lệnh sau:

db.messages.insert({messages:[{_id:ObjectId(), message:"Message 1."}]}); 

Lưu ý _id:ObjectId() đồng ruộng. Kết quả như sau:

Bây giờ tôi có một ObjectId(56...) , Tôi có thể cập nhật bản ghi cụ thể đó và chèn thêm tin nhắn vào đó. Và lệnh như sau:

db.messages.update({"_id":ObjectId("56...")}, 
{$push:{messages:{_id:ObjectId(), message:"I am message 2."}}});

Và ở trên sẽ chèn thông điệp mới vào bộ sưu tập. Xem ảnh chụp màn hình bên dưới:

và cuối cùng sau một vài cập nhật, bộ sưu tập trông như sau:

Tất cả các trường _id trong messages mảng được tạo tự động.

Có thể không phải là một ý kiến ​​hay khi sử dụng _id các lĩnh vực vì nhiều lý do khác nhau. Vui lòng Google để biết thêm chi tiết về việc có nên sử dụng _id làm khóa cho các tài liệu phụ hay không.

Tôi đã sử dụng MongoDB shell phiên bản 3.0.6 cho các lệnh.

CHỈNH SỬA 28-01-2016 16:09

Vì giải pháp trên dựa trên MongoDB shell, tôi quyết định thực hiện một thử nghiệm khác bằng cách sử dụng trình điều khiển Node.js cho MongoDB. Trước hết, tôi khai báo biến ObjectID như sau

var ObjectID = require('mongodb').ObjectID;

Tôi sẽ sử dụng ObjectID với id tài liệu của chuỗi mà thông báo sẽ được chèn vào như sau trong update của tôi và findOneAndUpdate lệnh gọi hàm

app.get('/insertNewMessage', function(req, res) {
    db.collection("messages").findOneAndUpdate({
        _id: new ObjectID('56aa3554e90911b64c36a424')
    }, {
        $push: {
            messages: {
                _id: new ObjectID(),
                message: "From NodeJS with <3 using findOneAndUpdate.Bye."
            }
        }
    }, function(err, result) {
        if (err)
            res.json(err);
        else
            res.json(result);
    });
});

Đã thử nghiệm cả hai và hoạt động tốt. Xem ảnh chụp màn hình bên dưới:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cập nhật các mảng lồng nhau trong mongodb

  2. Nhóm có điều kiện với $ tồn tại bên trong $ cond

  3. Tổng quan về Báo cáo Hoạt động Cơ sở dữ liệu trong ClusterControl

  4. Bản in đẹp trong MongoDB shell làm mặc định

  5. Cách tạo trình rút ngắn URL với Node.js và MongoDB