MongoDB将键和值从一个键和值复制到另一个键和值

时间:2014-02-16 20:15:07

标签: mongodb

我正在尝试将键和值复制到每个文档的字段中。

文档示例“db.ruj_users.find()”:

{

    "_id" : ObjectId("52fd5f7ae1ab21223018121d"),    
    "email_notification" : "on",
    "email_notification_interval" : "immediately",    
    "news_notification" : "on",
    "notifs" : [ 
        {}
    ],

}

我尝试过的代码:

db.ruj_users.find().snapshot().forEach(function(elemt) {
    elemt.notifs.emailNotif = elemt.email_notification;
    elemt.notifs.emailNotifIntrval = elemt.email_notification_interval;    
    elemt.notifs.newsNotif = elemt.news_notification;


db.ruj_users.notifs.update(
{$set:[
    elemt
    ]     
})

收到错误:未捕获异常:断言失败:需要一个对象

基本上,我想组织我的文档,所以我想将“email_notifcations,email_notifications_interval和news_notification”复制到“notifs”中,然后删除旧条目。

1 个答案:

答案 0 :(得分:0)

以下查询设置notifs字段并删除所有其他字段("email_notifcations""email_notifications_interval""news_notification"),因为使用了update命令而没有$set } operator。

db.ruj_users.find().forEach(function (elem) {
    var obj = {
        emailNotif: elem.email_notification,
        emailNotifIntrval: elem.email_notification_interval,    
        newsNotif: elem.news_notification,
    };
    db.ruj_users.update({_id: elem._id}, { notifs: obj });
})

请确保您的文档没有任何其他字段(_id除外),因为此字段也将被删除。在这种情况下,您应该使用$set运算符重写查询。