【发布时间】:2020-05-23 07:44:21
【问题描述】:
我在Collection 中有一个Documents,它的字段是Array (foo)。这是其他subdocuments 的Array。我想为每个document 中的每个subdocument 设置相同的字段(栏)为相同的值。这个值来自一个复选框。
所以..我的客户端代码类似于
'click #checkAll'(e, template) {
const target = e.target;
const checked = $(target).prop('checked');
//Call Server Method to update list of Docs
const docIds = getIds();
Meteor.call('updateAllSubDocs', docIds, checked);
}
我尝试使用https://docs.mongodb.com/manual/reference/operator/update/positional-all/#positional-update-all
并为我的服务器辅助方法提出了以下内容。
'updateAllSubDocs'(ids, checked) {
Items.update({ _id: { $in: ids } }, { $set: { "foo.$[].bar": bar } },
{ multi: true }, function (err, result) {
if (err) {
throw new Meteor.Error('error updating');
}
});
}
但这会引发错误“架构不允许 foo.$[].bar”。有任何想法吗? 我对父文档和子文档都使用 SimpleSchema
谢谢!
【问题讨论】:
-
请提供一些示例数据和架构,最新版本的 MongoDB 允许您根据当前文档使用值更新文档
-
如果您的问题只关注复选框值,我假设它们是布尔值,您可以将批量更新分为两组,一组为
true,另一组为false值 -
只更新根据您的应用程序更改的复选框也可能有意义
标签: javascript node.js mongodb meteor