如何更新属于外部文档的数组中的文档?

时间:2015-01-27 17:47:49

标签: meteor minimongo

我有以下文件:

mainDoc = {
        owner: Meteor.userId(),
        createdOn: new Date(),
        active: false,
        label: "Dashboard #" + ($("ul#u-nav-tabs").find("li.u-tab").length + 1),
        monitors: [/*Embedded documents*/],
        sharewith: []
    };

mainDoc.monitors是以下文档的数组:

innerDoc = {
                _id: id._str,
                owner: Meteor.userId(),
                createdOn: new Date(),
                label: monitorLabel,
                metadata: {custDate: {}},
                style: {
                    top: mystyle.top,
                    left: mystyle.left,
                    width: 0,
                    height: 0
                },
                shown: true,
                sharewith: []
            }

我在服务器上设置了以下权限

userDashboards.allow({
    insert: function (userId) {
        "use strict";
        return userId;
    },
    update: function (userId, doc) {
        "use strict";
        return doc.owner === userId;
    },
    remove: function (userId, doc) {
        "use strict";
        return doc.owner === userId;
    },
    fetch: ["owner", "monitors"]
});

到目前为止,我在客户端尝试了这个:

console.log(userDashboards.findOne({"monitors._id": "5f94f2a15bddd908f2bc9d5d"}));

但我只获得完整的文档,而不是嵌入的文档。

所以问题是,如何直接和浏览器更新innerDoc.style

1 个答案:

答案 0 :(得分:0)

试试这个。

<强>更新

userDashboards.update({_id:"5f94f2a15bddd908f2bc9d5d"},{$set:{'monitors[0]._id':"yeaaa look mom im editing documents with arrays"}})

假设“5f94f2a15bddd908f2bc9d5d”其._id而非monitors._id. 就像你说监视器是一个数组,所以你应该指定索引[0]。 请记住,更新的结构应该是这样的。

    Collection.update({_id:idDocument},{$set:{fieldToUpdate:newData}}) // correct

Collection.update({_id:idDocument,$set:{fieldToUpdate:newData}}) // wrong, you will get some "stack error" 

Collection.update({$set:{fieldToUpdate:newData}}) // wrong, you need to specify what document will be update and by stric the id should be always {_id:"5f94f2a15bddd908f2bc9d5d"} <-- like this

这应该有效。