对集合的更新操作请教.

发布问题 回首页

对集合的更新操作请教.

★ 0 成为第一个关注这个问题的人

数据结构是这样的:

`{ 
	"_id" : "550111d9e4b0cb56041d6367", 
	"roleName" : "tangjikede", 
	"level" : 35, 
	"stations" : 
	[ 
		{ 
			"uid" : 1, 
			"name" : "store", 
			"buildingMap" : 
			[ 
				{ "id" : 2051, "x" : 5.7, "y" : 0.9, "z" : 1.4 }, 
				{ "id" : 2003, "x" : -5.3, "y" : 3.3, "z" : 10.1 }, 
				{ "id" : 1851, "x" : -4.7, "y" : 0.6, "z" : 3.6 }, 
				{ "id" : 1801, "x" : -11.1, "y" : 4.2, "z" : -1.4 }
			], 
			"fortMap" : 
			[ 
				{ "sid" : 10501, "index" : 5, "uid" : 4 }, 
				{ "sid" : 10502, "index" : 11, "uid" : 6 }, 
				{ "sid" : 10501, "index" : 12, "uid" : 5 } 
			], 
		},
		{ 
			"uid" : 2, 
			"name" : "tech", 
			"buildingMap" : 
			[ 
				{ "id" : 2051, "x" : 5.7, "y" : 0.4, "z" : 1.9 }, 
				{ "id" : 2003, "x" : -5.3, "y" : 3.4, "z" : 10.5 }, 
				{ "id" : 1851, "x" : -4.7, "y" : 0.1, "z" : 3.2 }, 
				{ "id" : 1801, "x" : -11.5, "y" : 4.5, "z" : -1.4 }
			], 
			"fortMap" : 
			[ 
				{ "sid" : 10501, "index" : 5, "uid" : 4 }, 
				{ "sid" : 10502, "index" : 11, "uid" : 6 }, 
				{ "sid" : 10501, "index" : 12, "uid" : 5 } 
			], 
		}
	]
}`

在玩家离线后, 被攻击之后, 会修改其中的一些属性(固定的), 然后会更新到数据库.
比如修改level 和 stations 中的 buildingMap.
我现在是用两条语句实现的:
db.user.update({“roleName”:”tangjikede”},{$set:{ “level”:36}})
db.user.update({“roleName”:”tangjikede”,”stations.uid”:1},{$set:{ “stations.$.buildingMap”:[
{ "id" : 2051, "x" : 15.7, "y" : 0.4, "z" : 1.9 },
{ "id" : 2003, "x" : -15.3, "y" : 3.4, "z" : 10.5 },
{ "id" : 1851, "x" : -14.7, "y" : 0.1, "z" : 3.2 },
{ "id" : 1801, "x" : -111.5, "y" : 4.5, "z" : -1.4 }
]}})
这两个语句能合并到一起么… 求教

Edited on 11:35 上午
糖几颗的 在大约 之前评论了回答
  • 提问于
  • 回答数1 个
  • 浏览 499 次
  • 最新活跃于

1 个回答1

1
eshujiushiwo answered about

HI
你好。直接放一起好了。
db.user.update({“roleName”:”tangjikede”,”stations.uid”:1},{$set:{level:36,”stations.$.buildingMap”:[
{ "id" : 2051, "x" : 15.7, "y" : 0.4, "z" : 1.9 },
{ "id" : 2003, "x" : -15.3, "y" : 3.4, "z" : 10.5 },
{ "id" : 1851, "x" : -14.7, "y" : 0.1, "z" : 3.2 },
{ "id" : 1801, "x" : -111.5, "y" : 4.5, "z" : -1.4 }
]}})

糖几颗的 在大约 之前评论了回答
1 Comment
  • 有个问题. 那两个条件 后面那个条件 stations.uid:1 没有匹配到, 只匹配到了rolName, 那么, level 这个域会更新到么. 我去试了一下, 只满足其中一个条件, 那么语句就不会执行成功. 正常情况下, 肯定两个条件都会满足的... 如果没有别的方式来合并的话, 我就先这么用.... -

问题状态

  • Open

类别

2个参与者

对集合的更新操作请教.》有14个想法

  1. 谢答,但个人认为不准确,1.mr我觉得不适合实时计算,更贴合后期数据统计需求,2.aggregate必须支持自定义函数,就好像你定义个abc(1,2)一样肯定是计算了,现在的问题是abc(1,2)这个参数我想传个字段进去,比如abc($qty,2)这样….他就不好使了….难道大家没有在aggregate中用字段进行计算的经历么?

发表评论