我有以下文件:
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
?
答案 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
这应该有效。