2014-12-18 24 views
9

this numaralı gönderide, kabul edilen yanıt, bir yükseltme işleminde $set ve $setOnInsert altında aynı alanlara sahip olamayacağınızı açıklar.

Birisi bunun nedenini açıklayabilir mi? $setOnInsert$set ile çakışmamalı gibi görünüyor, çünkü belge bir belge eklendiğinde kullanılır ve belge güncellendiğinde kullanılır.

+5

, bu artık durumun nedenine ilişkin bir açıklama yoktur; Bunun da uygulandığını görmek isterim. "$ Set" ve "$ setOnInsert" in aynı güncellemede aynı alanda çalışmasına izin vermek için bir geliştirme talebi, [SERVER-10711] (https://jira.mongodb.org/browse/SERVER-10711) var. . Önceliğini yükseltmek için bu konuyu yorumlayabilir, izleyebilir ve güncelleyebilirsiniz. – wdberkeley

+1

Bunu işaret ettiğin için teşekkürler @wdberkeley. İki sorguya ihtiyaç duymadan bunun bir çözümü olup olmadığını biliyor musunuz? – jtmarmon

cevap

5

$ operatör de Upsert kullanılır ayarlayın. Bu nedenle, aynı alanları hem $ set ve $ setOnInsert adresinde belirtmek anlamsız.

Sadece boş bir koleksiyon bu deneyin: Dürüst

db.items.remove(); 
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1}) 
db.items.find({}); 
+4

Bu "saçma" değil. Örneğin, belgenin yeni eklenmesi durumunda 'true' olması ve yeni güncellenmişse 'false' olması gerekiyor. Hem "$ set" (hem false) hem de $ setOnInsert ("true") olarak aynı alan varsa ve belge eklendiyse, $ setOnInsert alanındaki alan da var olmasına rağmen öncelikli olmalıdır. $ set' bölümünde. – maganap

İlgili konular