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

Cập nhật Nhiều nếu tồn tại, nếu không, hãy tạo cho mỗi LeadId không tồn tại một Tài liệu mới

Từ truy vấn của bạn, vì bạn đang thực hiện .updateMany() , bạn không cần phải làm { multi: true } . Thông thường, bạn có thể thực hiện upert bằng cách sử dụng {upset: true} , nhưng lý tưởng nhất là nó sẽ tạo một tài liệu mới dựa trên tiêu chí lọc với các trường cập nhật chỉ từ truy vấn đầu vào nếu không tìm thấy kết quả phù hợp nào trong DB. Nhưng vì ở đây chúng tôi có một danh sách ($in ) trong tiêu chí bộ lọc, nó có thể không hoạt động bình thường, hãy thử cách này:

let winnerLeads = [1, 2, 3, 31, 5]
let groupTarget = 1
let howManyClaims = 2
let bulkArr = []
for (i of winnerLeads) {
    bulkArr.push({
        updateOne: {
            "filter": {
                LeadId: i,
                TargetedToBeClaimedByClientType: groupTarget
            },
            // If you wanted it to be incremented rather than replace the field, then try `$inc` instead of `$set`.
            "update": { $set: { TotalClaimsToBeClaimedByClientType: howManyClaims } },
            "upsert": true
        }
    })
}
db.EightWeekGamePlan.bulkWrite(bulkArr);

Dữ liệu thu thập:

/* 1 */
{
    "_id" : ObjectId("5e06eb8f400289966e00fac2"),
    "LeadId" : 1,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e06eb98400289966e00fb88"),
    "LeadId" : 2,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 3 */
{
    "_id" : ObjectId("5e06eba0400289966e00fc47"),
    "LeadId" : 3,
    "TotalClaimsToBeClaimedByClientType" : 0,
    "TargetedToBeClaimedByClientType" : 11
}

/* 4 */
{
    "_id" : ObjectId("5e06ebac400289966e00fd4b"),
    "LeadId" : 4,
    "TotalClaimsToBeClaimedByClientType" : 1,
    "TargetedToBeClaimedByClientType" : 11
}

/* 5 */
{
    "_id" : ObjectId("5e06ecef400289966e01273a"),
    "LeadId" : 5,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

Kết quả:

/* 1 */
{
    "_id" : ObjectId("5e06eb8f400289966e00fac2"),
    "LeadId" : 1,
    "TotalClaimsToBeClaimedByClientType" : 2.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e06eb98400289966e00fb88"),
    "LeadId" : 2,
    "TotalClaimsToBeClaimedByClientType" : 2.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 3 */
{
    "_id" : ObjectId("5e06eba0400289966e00fc47"),
    "LeadId" : 3,
    "TotalClaimsToBeClaimedByClientType" : 0,
    "TargetedToBeClaimedByClientType" : 11
}

/* 4 */
{
    "_id" : ObjectId("5e06ebac400289966e00fd4b"),
    "LeadId" : 4,
    "TotalClaimsToBeClaimedByClientType" : 1,
    "TargetedToBeClaimedByClientType" : 11
}

/* 5 */
{
    "_id" : ObjectId("5e06ecef400289966e01273a"),
    "LeadId" : 5,
    "TotalClaimsToBeClaimedByClientType" : 2,
    "TargetedToBeClaimedByClientType" : 1
}

/* 6 */
{
    "_id" : ObjectId("5e071eb1400289966e0597a0"),
    "TargetedToBeClaimedByClientType" : 1.0,
    "LeadId" : 3.0,
    "TotalClaimsToBeClaimedByClientType" : 2.0
}

/* 7 */
{
    "_id" : ObjectId("5e071e62400289966e059168"),
    "TargetedToBeClaimedByClientType" : 1.0,
    "LeadId" : 31.0,
    "TotalClaimsToBeClaimedByClientType" : 2.0
}

Về cơ bản, số lượng lớn không trả về bất kỳ tài liệu nào ngoại trừ ghi kết quả, bạn có thể xác minh trong DB để biết kết quả hoạt động cập nhật, Cũng từ kết quả trên 6 đã chèn dưới dạng LeadId : 3 + TargetedToBeClaimedByClientType" : 1.0 (Vì vậy, LeadId:3 bị trùng lặp) kết hợp không có trong DB &7 đã được chèn dưới dạng LeadId : 31 không có trong DB, Còn lại 1 , 2 , 5 của TotalClaimsToBeClaimedByClientType đã được cập nhật.

Tham khảo: BulkWrite




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB chiếu một subocument

  2. Không thể tạo thư mục MongoDB / data / db trên macOS Catalina

  3. Cách áp dụng thuộc tính BsonRepresentation theo quy ước khi sử dụng MongoDB

  4. Cách lấy đầu ra của mongo shell (ba chấm) cho lệnh chưa kết thúc

  5. Nhập nextjs nhưng không gọi hàm throws Không tìm thấy mô-đun:Lỗi:Không thể giải quyết 'dns'