【发布时间】:2016-08-16 01:41:31
【问题描述】:
所以我正在使用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
}
}
)
但重复出现,我做错了什么?
【问题讨论】:
-
那么您到底期望发生什么?关键是
checked_on和days的组合是“集合”中对象中的两个属性,如果这些“不同”与已经存在的东西有任何不同,那么它实际上是一个“新物品。因此,checked_on或days甚至可能只是内部的day属性的“集合”实际上表示“唯一”项。所以$addToSet无法处理这个问题,但除非你真的告诉我们是什么将一个项目定义为独一无二的,否则没有人可以帮助你。 -
@NeilLunn 我不确定我理解你的意思。可用性中的所有这些元素必须是唯一的
标签: python mongodb pymongo pymongo-3.x