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

MongoDB cập nhật nhiều tài liệu con với hoặc truy vấn

Bạn gặp lỗi này

vì truy vấn thứ hai của bạn khớp với nhiều tài liệu phụ . Hiện tại, không thể sử dụng toán tử vị trí để cập nhật tất cả các mục trong một mảng bằng toán tử vị trí.

vì vậy để giải quyết vấn đề của bạn, bạn có thể làm theo quy trình này

  1. Tìm tài liệu bằng _id và để tìm tài liệu phụ bằng $ elemMatch và sau đó

  2. cập nhật từng tài liệu con và lưu tài liệu lại

có thể thử như thế này:

db.deduplications.find(  
{ $or: [ {
         "_id": ObjectId("583fc558668bde730a460e11") , 
        "DeviceVersionPairs":{
            $elemMatch:{ "DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") , 
            "CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") ,
            "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") ,
            "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }}
    } ,   
    { 
        "_id": ObjectId("583fc558668bde730a460e11") , 
        "DeviceVersionPairs":{
            $elemMatch:{ "DeviceId": ObjectId("56dfe1356caaea14a819f1e4") , 
            "CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") , 
            "CloudFileId": ObjectId("583fb539e015b8a53fb71872") , 
            "VersionId": ObjectId("583fb4ca6e7f331874213584") }}
    } ] 
}).forEach(function (doc) {
    doc.DeviceVersionPairs.forEach(function (device) {
      device.status = 'passive';
    });
    db.deduplications.save(doc);
 });


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tính khoảng cách trong Java bằng MongoDB

  2. Sự khác biệt giữa com.mongodb.client.MongoClient và com.mongodb.MongoClient

  3. Cách tạo Người dùng và thêm Vai trò trong MongoDB

  4. Mongo cách tra cứu $ với DBRef

  5. Ví dụ cho các giao dịch trong mongodb với GoLang