【发布时间】:2014-08-02 03:11:34
【问题描述】:
我想在 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"]
}
]
}
这可以在一个查询中完成吗?
我正在尝试使用 Upsert 对 $each、$addToSet 和 $set 进行各种排列,但到目前为止没有运气。这是我目前拥有的(pymongo):
for d in daterange:
curves.update({"curvename":curvename}, \
{"$addToSet": {"date": d, "members": {"$each": members}}},
upsert = True)
这是添加所有日期,但成员仅在末尾添加一次。完全错误。
以上可以在一个查询中完成吗?如何将新成员添加到我的每个日期,但如果日期不存在,则创建它们并添加成员?
我更喜欢 pymongo 解决方案,但 mongo 控制台也可以。
【问题讨论】: