保存返回ID
mongodb有个id属性,一般情况下还挺好用,但因为有这个也会有很多麻烦,比如你要将刚加的数据找出来,因为ID是刚才产生的,你并不知道,这时如果用你用以前加之前的取数据,万一有两条一模一样的数据就出问题了。不过这一点mongodb的开发人已经想到了,他在save之后会返回一个objectId这样你用这个ID再找到那条记录就可以了。
对表/子属性的引用
如果有个子表这样db.Building.House,那么你可以用直接字符来引用他, a = 'Building.House';db[a]可以引用到表;同理对表内子属性也可以这样引用;由此可见mongodb创立人的宗旨是用户对数据的引用的效率的提高;在update的时候同样可以这样,下面的hasArmy就是对数据子属性的引用
hasArmy = 'HasArmy.' + info['BuiFrame']
waitArmy = 'WaitArmy.' + info['BuiFrame']
num = round(__time*pro*bui['HarvestArmy']/100)
self.db.User.update({'_id':ObjectId(info['UserID'])},
{'$inc':{
'Exp' : self.checkHarvesExp((__time*pro*bui['HarvestExp']/100)/20),
hasArmy : num,
waitArmy : -num
}})
不过要注意一点,如果是None,是不能直接扩展属性进去的;比如:
{u'c': None, u'_id': ObjectId('4d030655a53f9407d4000003'), u'b': 0}
要变成
{u'c': {u'wait': 1}, u'_id': ObjectId('4d030655a53f9407d4000003'), u'b': 0}
用'$inc'是不行的,需要事先将c变成{},
{u'c': {}, u'_id': ObjectId('4d030655a53f9407d4000003'), u'b': 0}
这样就可以用inc加属性进去了