你好我有以下集合,最初有一个空值
{
"_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
似乎没有正常工作,任何建议都非常赞赏
答案 0 :(得分:1)
实际上非常简单
def insert_missing_size(missing_size):
db.attributes.update(
{ 'name': {'en-UK': 'Size'} },
{ "$push":
{
"values": missing_size
}
}, upsert=True
)