2016-08-08 14 views
5

Điều tôi cố gắng thực hiện khá đơn giản, tôi có một mảng bên trong tài liệu;MongoDB chèn tài liệu "hoặc" trường gia tăng nếu tồn tại trong mảng

"tags": [ 
    { 
     "t" : "architecture", 
     "n" : 12 
    }, 
    { 
     "t" : "contemporary", 
     "n" : 2 
    }, 
    { 
     "t" : "creative", 
     "n" : 1 
    }, 
    { 
     "t" : "concrete", 
     "n" : 3 
    } 
] 

Tôi muốn đẩy một loạt các mặt hàng để mảng như

["architecture","blabladontexist"] 

Nếu mục tồn tại, tôi muốn tăng giá trị n đối tượng (trong trường hợp này architecture của nó),

và nếu không, thêm nó dưới dạng một Mục mới (với giá trị là n=0) { "t": "blabladontexist", "n":0}

Tôi đã thử $addToSet, $set, $inc, $upsert: true với nhiều kết hợp và không thể thực hiện được.

Làm cách nào chúng tôi có thể thực hiện việc này trong MongoDB?

+0

Bạn đã nhìn vào đường ống tổng hợp chưa? –

+1

Tôi đoán tập hợp nó không phải giải pháp cho vấn đề, vì nó chỉ chọn dữ liệu từ bộ sưu tập. @Sadettin Bilal Savaş cần chèn dữ liệu. Nó chỉ có lý do nếu cấu trúc của bộ sưu tập sẽ thay đổi. – Kison

+0

Bạn có cân nhắc việc thay đổi cấu trúc dữ liệu của mình thành giải pháp không? Ví dụ: bạn có thể tham chiếu đến ID thực thể 'Thẻ' trong mảng' thẻ' của mình. –

Trả lời

0

Tôi không tin rằng điều này có thể thực hiện trong một lệnh duy nhất.

MongoDB không cho phép $ set (hoặc $ setOnInsert) và $ inc ảnh hưởng đến cùng một trường trong một lệnh.

Bạn sẽ phải thực hiện một lệnh cập nhật để cố gắng $ inc trường và nếu điều đó không thay đổi bất kỳ tài liệu nào (n = 0), hãy cập nhật thành $ đặt trường thành giá trị mặc định.

Các vấn đề liên quan