2012-06-29 761 views
5

Đây là một ví dụ về những gì tôi đang cố gắng làm, vì tôi không thể giải thích ý tôi là gì.Làm cách nào để thêm một giá trị khác vào từ điển trong MongoDB?

Tôi thực hiện điều này trong mongo CLI: db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []}). Những gì tôi muốn làm là cập nhật mục nhập đó để thêm nhận xét vào từ điển comments.

Làm cách nào để đạt được điều này bằng cách sử dụng db.posts.update()?

+0

Tôi đã chỉnh sửa câu hỏi để đặt câu hỏi thành "câu hỏi thực".Nếu điều này vẫn không đáp ứng các tiêu chuẩn của bạn, hãy cho tôi biết vấn đề là gì. –

+0

Để thêm một phần tử vào một mảng, tôi nghĩ rằng những gì bạn muốn là $ push hoặc $ addToSet: http://www.mongodb.org/display/DOCS/Updating – matulef

Trả lời

-2

Đối với một đối tượng như:

{ 
    name: "Hello, world!", 
    content: "This is my first post" 
} 

nếu bây giờ bạn chạy

db.posts.update({name: "Hello, world!"}, {name: "First post"}); 

đây là những gì sẽ là kết quả:

{ 
    title: "First post" 
} 

Thuộc tính nội dung sẽ được gỡ bỏ vì có không có giá trị thay thế nào được cung cấp. Tôi đang đề cập đến điều này vì đây là lỗi phổ biến.

Vì vậy, nếu bạn muốn "thêm" một thuộc tính, bạn cần phải chạy:

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

$ đẩy được sử dụng nếu bạn đang phụ thêm dữ liệu vào một mảng. Nếu trường bình thường của nó sử dụng $ set.

Tham chiếu: http://www.mongodb.org/display/DOCS/Updating

6

Câu hỏi và ví dụ của OP không khớp. Anh ấy thực sự muốn chèn một trường vào một mảng trong tài liệu, có nghĩa là

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

chỉ hoạt động tốt.

Tuy nhiên, nếu bạn muốn thêm giá trị hoặc tài liệu phụ vào từ điển, bạn sẽ sử dụng lệnh $set. Lấy tài liệu này làm ví dụ của chúng tôi:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10 
    } 
} 

Giả sử bạn muốn thêm "apples": 2 vào các mục. Lệnh sẽ

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": 2}}); 

Tài liệu của bạn sau đó sẽ như thế nào:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10, 
     "apples: 2 
    } 
} 

Lưu ý rằng điều này làm việc với chèn subdocument là tốt, vì vậy chúng tôi có thể sửa đổi các ví dụ ban đầu:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     } 
    } 
} 

Và chúng ta hãy chèn 4 táo grith smith và 8 quả táo fuji.

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}}); 

tài liệu của chúng tôi bây giờ sẽ là:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     }, 
     "apples": { 
      "fuji": 8, 
      "granny smith": 4 
     } 
    } 
} 

Một bình luận cuối cùng: lưu ý rằng nếu subdocument hoặc trường đã tồn tại, sau đó nó sẽ được ghi đè bởi các lệnh $set.