mongodb操作

保存返回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加属性进去了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值