数据结构是这样的:
`{ "_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 }
]}})
这两个语句能合并到一起么… 求教
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 }
]}})
有个问题.
那两个条件 后面那个条件 stations.uid:1 没有匹配到, 只匹配到了rolName, 那么, level 这个域会更新到么.
我去试了一下, 只满足其中一个条件, 那么语句就不会执行成功. 正常情况下, 肯定两个条件都会满足的… 如果没有别的方式来合并的话, 我就先这么用….