2014-09-30 4 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 
    ) 
Смежные вопросы