2012-12-12 53 views
0

我需要在mongodb中更新記錄,其中新值取決於記錄中另一個字段的值。根據字段值在1個查詢中運行2個mongodb更新

例如獲得以下幾方面收集

{id: 1, list: []} 
{id: 2, list: [6]} 
{id: 3, list: []} 
{id: 4, list: [6]} 
{id: 5, list: []} 

我希望能夠說:

if ('id' is in [1, 3, 5]) => add the value '6' to 'list' 
else => remove the value '6' from 'list' 

的結果將是:

{id: 1, list: [6]} 
{id: 2, list: []} 
{id: 3, list: [6]} 
{id: 4, list: []} 
{id: 5, list: [6]} 

這可能在2完成更新查詢,如下所示,但我試圖在1:

db.collection.update({$in: [1, 3, 5]}, {$addToSet: {list: 6}}) 
db.collection.update({$in: [2, 4]}, {$pull: {list: 6}}) 

代碼是用Java編寫的。

回答

1

MongoDB目前還沒有內部的case語句,可以讓你在SQL中擁有case的能力。

因此,你需要單獨做每一個,但是你可以改變你的後面的查詢是沿的線條更:這應該做到你更好地提供的if聲明

db.collection.update({$nin: [1, 3, 5]}, {$pull: {list: 6}}) 

+0

我有{$ in:[2,4]的唯一原因是[2,4]不一定是[1,3,5]的補充。它可能只是[2]。 – ben39

+0

如果可能的話,最好不要使用$ nin或任何否定運算符。 –

+1

@RaxitSheth如果您不是否定布爾或低選擇性字段,否則使用否定屬性是可以的,否則運算符仍然可以使用覆蓋索引。 – Sammaye

相關問題