通过一个键索引的子文档列表的唯一索引

问题描述:

我需要知道是否有可能有对象列表,其中的对象是白天唯一的。通过一个键索引的子文档列表的唯一索引

我有一个收集这种格式:

{ 
    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。但我无法设置独特的领域。

我需要推一个新的计数器,如果一天存在,它应该被替换。

唯一索引仅适用于根文档,但不适用于嵌入式文档。所以这意味着你不能插入两个具有相同域名和counters.day的文档。但是你可以插入嵌入的counters重复的行。

我需要推一个新的计数器,如果一天存在,应该是 代替。

当您试图插入新的嵌入式文档时,您应该检查具有这样的日期的文档是否存在,以及是否存在进行更新,否则插入。

+3

你可以一口气做到吗?如果你检查,这是好的,但在插入其他人插入之前呢? – Radek