所以我使用的是pymongo==3.2.1
和Mongo 3.2
但由于某种原因,我的$addToSet
(以避免重复)无效。
我确保我的checked_on
时间戳匹配,例如ISODate("2016-04-21T00:00:00.000Z")
我的结构是这样的:
{
"_id": ObjectID("57062e357e254255a531165e"),
"availability": [
{
"checked_on": ISODate("2016-04-21T00:00:00.000Z"),
"days": [
{
"available": false,
"day": ISODate("2016-04-29T00:00:00.000Z")
},
{
"available": false,
"day": ISODate("2016-04-30T00:00:00.000Z")
}
]
}
],
"is_active": true,
"updated_on": ISODate("2016-04-21T13:41:12.449Z")
}
我试过了两个:
result = self.db[self.collection_name].update_one(
{'_id': doc['_id']},
{
'$addToSet': {
'availability': {
'$each': [
{
'checked_on': datetime.datetime(
date.year, date.month, date.day
),
'days': meta['availability']
}
]
}
},
'$set': {
'is_active': is_active, 'updated_on': date
}
}
)
和
result = self.db[self.collection_name].update_one(
{'_id': doc['_id']},
{
'$addToSet': {
'availability': {
'checked_on': datetime.datetime(
date.year, date.month, date.day
),
'days': meta['availability']
}
},
'$set': {
'is_active': is_active, 'updated_on': date
}
}
)
但重复出现了,我做错了什么?
答案 0 :(得分:0)
我做错了什么?
你没有做错任何事。这是因为您尝试添加到数组的值是一个文档。这只是documentation中提到的预期结果。
如果值是文档,如果数组中的现有文档与要添加的文档完全匹配,则MongoDB确定文档是重复的;即,现有文档具有完全相同的字段和值,并且字段的顺序相同。因此,字段顺序很重要,您无法指定MongoDB仅比较文档中字段的子集来确定文档是否与现有数组元素重复。