我希望将一系列子文档移动到由所有者ID键入的集合中。目前,我的收藏品是这样形成的:
"_id": ObjectId("123"),
"username": "Bob Dole",
"logins": [{
"_id": ObjectId("abc123"),
"date": ISODate("2016")
}, {
"_id": ObjectId("def456"),
"date": ISODate("2016")
}]
我正在寻找编写一个循环遍历每个用户的脚本的最佳方法,并将登录数组中的每个项目移动到它自己的"登录"收集,如下:
{
"_id": ObjectId("abc123"),
"_ownerId": ObjectId("123"),
"date": ISODate("2016")
}
{
"_id": ObjectId("def567"),
"_ownerId": ObjectId("123"),
"date": ISODate("2016")
}
当脚本结束时,我希望完全从所有用户中删除登录数组。
答案 0 :(得分:2)
此查询将使用聚合框架创建新集合 看看它看起来如何 - 只需删除$ out管道阶段
db.thinking.aggregate([
{
$unwind:"$logins"
},{
$project:{
_id:"$logins._id",
_ownerId:"$_id",
date:"$logins.date"
}
},
{
$out: "newCollection"
}
])
删除数组记录 - 如评论中所示:
db.thinking.update({},{ "$unset": { "logins": "" } },{ "multi": true })