我想将成员添加到MongoDB的子文档中的数组中,如果子文档本身不存在,我希望创建它。请采取以下措施:
{
curvename: "France",
dates: [
{
date: "2014-07-01",
members: ["m1", "m2", "m3"]
},
{
date: "2014-07-02",
members: ["m1", "m2", "m3"]
},
{
date: "2014-07-03",
members: ["m1", "m2", "m3"]
}
]
}
现在我想在每个日期添加“m4”和“m5”,但也包括“2014-07-04”,所以我想添加这个:
dates: [{
date: "2014-07-01",
members: ["m4", "m5"]
},
{
date: "2014-07-02",
members: ["m4", "m5"]
},
{
date: "2014-07-03",
members: ["m4", "m5"]
},
{
date: "2014-07-04",
members: ["m4", "m5"]
}]
to get this:
{
curvename: "France",
dates: [
{
date: "2014-07-01",
members: ["m1", "m2", "m3", "m4", "m5"]
},
{
date: "2014-07-02",
members: ["m1", "m2", "m3", "m4", "m5"]
},
{
date: "2014-07-03",
members: ["m1", "m2", "m3", "m4", "m5"]
},
{
date: "2014-07-04",
members: ["m4", "m5"]
}
]
}
这可以在一个查询中完成吗?
我正在尝试各种$ each,$ addToSet和$ set的排列,使用Upsert,到目前为止没有运气。这是我现在拥有的(pymongo):
for d in daterange:
curves.update({"curvename":curvename}, \
{"$addToSet": {"date": d, "members": {"$each": members}}},
upsert = True)
这是添加所有日期,但成员只在结尾处添加一次。完全错了。
以上是否可以在一个查询中完成?如何将新成员添加到我的每个日期,但是如果日期不存在,请创建它们并添加成员?
我更喜欢pymongo解决方案,但mongo控制台也会很好。
答案 0 :(得分:1)
对于通用可变长度数组,目前在MongoDB中不能这样做(2.6)。对数组的更新需要使用$
位置运算符或具体索引来定位特定的数组元素。
答案 1 :(得分:0)
试试这个:db.curves.update({'curvename':“France”},{$ push:{“dates.0.members”:“m1”}})
上面的查询可以将m1添加到成员数组,并且就像成员:[“m1”,“m4”,“m5”]
点击此链接:Mongodb update deeply nested subdocument 还阅读评论部分