0

我正在用流星编写一个应用程序并试图熟悉 mongodb,我正在尝试使用以下模式更新用户。

    user = {
    ... SOME DATA....,
    "profile": {
        "firstName": "HELLO",
        "lastName": "MIKE",
        "phoneNumber": "0432456524",
        "userRole": "General Practitioner",
        "practice": {
            "name": "Hello koramaiku",
            "address": "222 Hello St Helloville",
            "state": "NSW",
            "postcode": "2000"
        },
        "AHPRANumber": "4586546545",
        "providerNumber": "4565498751321"
    }, ..... SOME MORE DATA
}

我有一个设置表单,它将修改用户配置文件对象中的一些细节。我有一个表单,它允许您编辑配置文件对象中的名字、姓氏和电话号码,而无需替换某些现有值。

var userData = {
                    firstName: 'Hello',
                    lastName: 'Kora',
                    phoneNumber: '0422222222'
                };
Meteor.users.update({'_id': Meteor.userId() }, {$set : userData}, function(error){

                    ........
                });

但是,如果我执行更新,它会用新值覆盖整个配置文件对象,而不是只替换我需要的值。据我所知, $set 修饰符将替换某个字段中的数据(如果它们已经存在),如果它们不存在则添加到 set 中。

有没有办法像上面那样更新文档的数据,而不会覆盖我不想替换的数据?

谢谢。

4

1 回答 1

6

使用.

userData = {
                "profile.firstName": 'Hello',
                "profile.lastName": 'Kora',
                "profile.phoneNumber": '0422222222'
           };

这些将确保仅更改那些特定的密钥。

于 2013-07-04T08:57:30.450 回答