Mongodb
有沒有辦法通過 addToSet 找出值是否存在?
如果值不存在,addToSet 將值添加到數組中。
如果該值已經存在,MongoDB 將不會返回任何表明它存在的資訊。
有沒有辦法找出值是否存在?(除了通過數組)
MongoDB 不會像運算符那樣返回欄位級更新的結果
$addToSet
;整個文件更新要麼成功,要麼失敗。但是,假設您使用的是 MongoDB 2.6 或更高版本,您可以通過檢查
WriteResult
update/upsert 上的返回值來推斷更新是否為空操作。下面的範例使用 MongoDB 3.2。
測試數據:
db.fruit.insert([ { _id: 'a', tasty: ['apple', 'banana', 'pear']}, { _id: 'b', tasty: ['kumquat', 'banana', 'mango']}, { _id: 'c', tasty: ['plum'] } ])
值已添加到數組
將“mango”添加到文件中的美味數組中
a
:db.fruit.update( { _id: 'a' }, { $addToSet: { 'tasty': 'mango' }} ) WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
由於唯一可能的更新是對數組,
nModified:1
表示添加了“芒果”。值已存在於數組中
將“mango”添加到文件中的美味數組中
b
:db.fruit.update( { _id: 'b' }, { $addToSet: { 'tasty': 'mango' }} ) WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 0 })
由於唯一可能的更新是對數組,
nModified:0
表明“芒果”已經存在。更新更多欄位
如果合併多個欄位更新,您將不知道實際更新了哪個欄位。在這種情況下,您可以專門匹配尚未設置數組值的文件:
db.fruit.update( // query { _id: 'c', tasty: { $nin: ['mango'] } }, // update { $set: { fruitBasket: true }, $addToSet: { 'tasty': 'mango' } } ) WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })