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

Di chuyển một phần tử từ mảng này sang mảng khác trong cùng một tài liệu MongoDB

Không có $ move trong MongoDB . Có thể nói, giải pháp đơn giản nhất là cách tiếp cận 2 giai đoạn:

  1. Truy vấn tài liệu
  2. Tạo bản cập nhật bằng mã $ pull $ push / $ addToSet

Phần quan trọng ở đây, để đảm bảo rằng mọi thứ đều là không quan trọng, là đưa tài liệu mảng ban đầu vào truy vấn cho bản cập nhật.

Đưa ra một tài liệu có dạng sau:

{
    _id: "foo",
    arrayField: [
        {
            a: 1,
            b: 1
        },
        {
            a: 2,
            b: 1
        }
    ]
}

Giả sử bạn muốn di chuyển {a:1, b:1} đến một trường khác, có thể được gọi là someOtherArrayField , bạn muốn làm điều gì đó giống như.

var doc = db.col.findOne({_id: "foo"});
var arrayDocToMove = doc.arrayField[0];
db.col.update({_id: "foo", arrayField: { $elemMatch: arrayDocToMove} }, { $pull: { arrayField: arrayDocToMove }, $addToSet: { someOtherArrayField: arrayDocToMove } })

Lý do chúng tôi sử dụng $ elemMatch là đảm bảo trường chúng ta sắp xóa khỏi mảng không thay đổi kể từ lần đầu tiên chúng ta truy vấn tài liệu. Khi được kết hợp với $ pull nó cũng không hoàn toàn cần thiết, nhưng tôi thường thận trọng quá mức trong những tình huống này. Nếu ứng dụng của bạn không có tính song song và bạn chỉ có một phiên bản ứng dụng, thì điều đó không hoàn toàn cần thiết.

Bây giờ khi chúng tôi kiểm tra tài liệu kết quả, chúng tôi nhận được:

db.col.findOne()
{
        "_id" : "foo",
        "arrayField" : [
                {
                        "a" : 2,
                        "b" : 1
                }
        ],
        "someOtherArrayField" : [
                {
                        "a" : 1,
                        "b" : 1
                }
        ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dữ liệu mùa xuân - DBRef lập chỉ mục MongoDB

  2. Nhập Ref trong lược đồ mongoose khi làm việc với Graphql

  3. AccountKey for CosmosDB trong cổng Azure ở đâu

  4. Các ABC của NestJS:Hướng dẫn cho người mới bắt đầu với MongoDB (Mongoose).

  5. Hoàn tác Thư giãn tổng hợp trong mongodb