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$push,但这不起作用。

然后我尝试了upsert$addToSet。但我无法设置唯一字段。

我需要推一个新的柜台,如果这一天存在,应该更换。

4

1 回答 1

1

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

我需要推一个新的柜台,如果这一天存在,应该更换。

当您尝试插入新的嵌入式文档时,您应该检查是否存在具有这一天的文档,如果存在则进行更新,否则插入。

于 2011-08-06T05:11:11.363 回答