0

次のドキュメントがあります。

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ブラウザから直接更新するにはどうすればよいかということです。

4

1 に答える 1

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

それはうまくいくはずです。

于 2015-01-27T21:49:12.963 に答える