0
Привет У меня есть следующая коллекция, которая изначально имеет пустые значенияPyMongo вставить запись, если не существует
{
"_id" : ObjectId("542abfe4a14c971c36c96ee3"),
"values" : [],
"name" : {
"en-UK" : "Size"
}
}
В моем коде, я хочу проверить, если значение существует, если нет, то добавьте его в сбор, вот код, который я до сих пор:
def get_attribute_size(size_code, size_name):
attribute_size_meta = db.attributes.aggregate([{ '$match': {'name.en-UK': 'Size'} },
{ '$unwind' : '$values' },
{ '$project': { 'code' : '$values.code', 'name' : '$values.name', 'valueId': '$values._id'} },
{ '$match': {
'$and': [
{'name.en-UK': str(size_name)},
{'code': int(size_code)}
]
}
}])
return attribute_size_meta['result']
def insert_missing_size(size_id, missing_size):
attributes.update({ "_id" : size_id,},
{ "$addToSet":
{ "values" : missing_size }
})
где мой missing_size, как:
{'code': u'3', 'name': {'en-UK': 'M'}, '_id': ObjectId('542ac47ba14c971c9b63353d')}
{'code': u'1', 'name': {'en-UK': '6 MTHS'}, '_id': ObjectId('542ac47ba14c971c9b633535')}
...
и код, который генерирует это:
size_code_id = get_attribute_size(size_code, size_name)
mong_id = get_mongo_size_id()
# if size_code_id returns an empty list, i want to create the entry
if size_code_id == []:
mongo_size = {
"code" : size_code,
"_id" : ObjectId(),
"name" : {"en-UK" : size_name}
}
insert_missing_size(mongo_size, mongo_size)
insert_missing_size
, кажется, не работать правильно, любой совет высоко ценится