MongoDB将子文档数组移动到它自己的集合中

时间:2016-04-05 20:28:44

标签: mongodb

我希望将一系列子文档移动到由所有者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")
}

当脚本结束时,我希望完全从所有用户中删除登录数组。

1 个答案:

答案 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 })