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

Đẩy đối tượng vào mảng nếu mảng tồn tại, nếu không, hãy tạo mảng với đối tượng trong MongoDB

Để giải thích tất cả các trường hợp có thể xảy ra ở đây, hãy xem xét từng trường hợp tài liệu:

Nếu tài liệu của bạn cần thay đổi trông giống như sau:

{
    "_id": "efgh",
    "name": "Jerry"
}

Sau đó, một trạng thái cập nhật như thế này:

db.collection.update(
    { "_id": "efgh" },
    { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)

Kết quả là:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": [
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}

Vì vậy, mảng được tạo và mục mới được thêm vào.

Nếu tài liệu của bạn đã có một mảng như thế này:

{
    "_id": "abcd",
    "name": "Tom",
    "myArray": [
        {
            "field1": "",
            "field2": ""
        }
    ]
}

Và về cơ bản bạn thực hiện cùng một tuyên bố:

db.collection.update(
    { "_id": "abcd" },
    { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)

Sau đó, nội dung tài liệu mới được nối vào mảng hiện có:

{
    "_id": "abcd",
    "name": "Tom",
    "myArray": [
        {
            "field1": "",
            "field2": ""
        },
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}

Tuy nhiên, nếu tài liệu gốc của bạn có trường được đặt tên nhưng nó không phải là một mảng, như sau:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": 123
}

Sau đó, hãy đảm bảo đó không phải là một mảng bằng cách kiểm tra trong điều kiện truy vấn và sử dụng $set thay vào đó:

db.collection.update(
    { "_id": "efgh", "myArray.0": { "$exists": false } },
    { "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)

Điều đó sẽ ghi đè một cách an toàn phần tử không phải là một mảng (ký hiệu dấu chấm "myArray.0" có nghĩa là phần tử mảng đầu tiên, không đúng) bằng một mảng mới chứa nội dung của bạn. Kết quả giống như ban đầu:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": [
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. So sánh ngày tháng trong Mongodb với trình điều khiển C # LINQ

  2. Truy vấn một mảng mảng trong MongoDB

  3. Làm thế nào để lấy tất cả các tài liệu con có giá trị nhất định của một trường nhất định?

  4. Mongoose - Tổng hợp $ đối sánh dựa trên các giá trị enum

  5. mở nắp bộ sưu tập MongoDB giới hạn