2011-08-05 52 views
1

我需要知道是否有可能有對象列表,其中的對象是白天唯一的。通過一個鍵索引的子文檔列表的唯一索引

我有一個收集這種格式:

{ 
    domain: "google.com" 
    counters: [ 
    { day: "2011-08-03", metric1: 10, metric_2: 15 } 
    { day: "2011-08-04", metric1: 08, metric_2: 07 } 
    { day: "2011-08-05", metric1: 20, metric_2: 150 } 
    ] 
} 

我想類似的東西:

db.test.ensureIndex({ domain: 1, 'counters.day': 1 }, { unique: true }). 

UPSERT$推,但這不工作。

然後我試着用upsert$ addToSet。但我無法設置獨特的領域。

我需要推一個新的計數器,如果一天存在,它應該被替換。

回答

1

唯一索引僅適用於根文檔,但不適用於嵌入式文檔。所以這意味着你不能插入兩個具有相同域名和counters.day的文檔。但是你可以插入嵌入的counters重複的行。

我需要推一個新的計數器,如果一天存在,應該是 代替。

當您試圖插入新的嵌入式文檔時,您應該檢查具有這樣的日期的文檔是否存在,以及是否存在進行更新,否則插入。

+3

你可以一口氣做到嗎?如果你檢查,這是好的,但在插入其他人插入之前呢? – Radek