所以我使用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
}
}
)
但重複出現,我做錯了什麼?
那麼你究竟期待什麼發生?要點在於,在「set」中的對象中具有「checked_on」和「days」的組合,如果這些「與」已經存在的內容「不同」,那麼它實際上是「新物品。所以無論是'checked_on'還是'days',甚至可能只是''day''屬性中的「set」,實際上都會表示這個「unique」項目。所以'$ addToSet'不能處理這個問題,但除非你真正告訴我們什麼東西確切地定義了一個項目是唯一的,否則沒有人能夠幫助你。 –
@NeilLunn我不知道我明白你的意思。所有這些內部可用的元素必須是獨一無二的 – psychok7