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

Di chuyển nguyên tử đối tượng theo ID từ mảng này sang mảng khác trong cùng một tài liệu

Đây là một ví dụ:

> db.baz.find()
> db.baz.insert({
...   "_id": ObjectId("4d525ab2924f0000000022ad"),
...   "arrayField": [
...     { id: 1, other: 23 },
...     { id: 2, other: 21 },
...     { id: 0, other: 235 },
...     { id: 3, other: 765 }
...   ],
...   "someOtherArrayField": []
... })
WriteResult({ "nInserted" : 1 })

function extractIdZero(arrayFieldName) {
    return {$arrayElemAt: [
        {$filter: {input: arrayFieldName, cond: {$eq: ["$$this.id", 0]}}}, 
        0
    ]};
}

extractIdZero("$arrayField")
{
    "$arrayElemAt" : [
        {
            "$filter" : {
                "input" : "$arrayField",
                "cond" : {
                    "$eq" : [
                        "$$this.id",
                        0
                    ]
                }
            }
        },
        0
    ]
}

db.baz.updateOne(
    {_id: ObjectId("4d525ab2924f0000000022ad")},
    [{$set: {
         arrayField: {$filter: {
             input: "$arrayField",
             cond: {$ne: ["$$this.id", 0]}
         }},
         someOtherArrayField: {$concatArrays: [
             "$someOtherArrayField",
             [extractIdZero("$arrayField")]
         ]}
     }}
    ])
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.baz.findOne()
{
    "_id" : ObjectId("4d525ab2924f0000000022ad"),
    "arrayField" : [
        {
            "id" : 1,
            "other" : 23
        },
        {
            "id" : 2,
            "other" : 21
        },
        {
            "id" : 3,
            "other" : 765
        }
    ],
    "someOtherArrayField" : [
        {
            "id" : 0,
            "other" : 235
        }
    ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB ::ID Mongo có phải là duy nhất trên các bộ sưu tập không?

  2. Mã hóa cơ sở dữ liệu MongoDB

  3. MongoError:Không xác thực được tài liệu - Làm cách nào để chèn cả float và int vào cùng một trường - được đánh dấu là trường kép?

  4. Làm cách nào để thực hiện các bài kiểm tra junit sử dụng mongoDB được nhúng trong ứng dụng springboot?

  5. Tôi có thể dễ dàng trả lại tất cả các trường của một tài liệu con dưới dạng các trường trong tài liệu cấp cao nhất bằng cách sử dụng khung tổng hợp không?