2014-09-30 82 views
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似乎沒有正常工作,任何意見大加讚賞

回答

1

這是很簡單的實際

def insert_missing_size(missing_size): 
    db.attributes.update( 
     { 'name': {'en-UK': 'Size'} }, 
     { "$push": 
      { 
      "values": missing_size 
      } 
     }, upsert=True 
    ) 
相關問題