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

Cập nhật hoặc thêm vào một bộ sưu tập con trong mongo

Tôi không chắc có cách nào dễ dàng để thực hiện việc này trong một truy vấn duy nhất,

Cập nhật bằng đường dẫn tổng hợp bắt đầu từ MongoDB v4.2,

  • $cond để kiểm tra tên có trong subColl mảng,
  • tình trạng đúng, cần hợp nhất với đối tượng hiện có, $map để lặp lại vòng lặp, kiểm tra điều kiện nếu khớp với điều kiện sau đó hợp nhất đối tượng dữ liệu mới với đối tượng hiện tại bằng cách sử dụng $mergeObjects
  • điều kiện sai, cần nối các mảng, subColl hiện tại mảng và đối tượng mới bằng cách sử dụng $concatArrays
const _id = 123;
const update = { name: 'John', other: 1000 };

Schema.findOneAndUpdate(
  { _id: _id },
  [{
    $set: {
      subColl: {
        $cond: [
          { $in: [update.name, "$subColl.name"] },
          {
            $map: {
              input: "$subColl",
              in: {
                $cond: [
                  { $eq: ["$$this.name", update.name] },
                  { $mergeObjects: ["$$this", update] },
                  "$$this"
                ]
              }
            }
          },
          { $concatArrays: ["$subColl", [update]] }
        ]
      }
    }
  }]
)

Sân chơi




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cập nhật mongodb không hiển thị trừ khi tôi khởi động lại máy chủ nút

  2. Mongoose, cập nhật giá trị trong mảng đối tượng

  3. Mongodb tổng kích thước của các trường mảng

  4. Chỉ định nhiều tiêu chí trong truy vấn db mùa xuân mongo

  5. Làm việc với các ký tự đặc biệt trong bộ sưu tập Mongo