是否可以使用Meteor在同一操作中同时执行$push
和$set
?
我希望它处于相同的操作中,因此通过分成两个不同的MongoDB操作,cursor.observe
不会被触发两次。
目前,以下内容无法插入数组:
Animals.update(
{_id: animal_id},
{
$set: {
driver_id: '',
status: 'feeding'
},
$push: {
feeder: Meteor.user()._id
}
}
)
要使$push
生效,需要将其拆分为2:
Animals.update(
{_id: animal_id},
{ $set:
{
driver_id: '',
status: 'feeding'
}
}
Animals.update(
{_id: animal_id},
{
$push: {
feeder: Meteor.user()._id
}
}
答案 0 :(得分:0)
您可以先将数据组合成$set
,然后将其推入,然后再包含它。
const animal = Animals.findOne(animal_id);
let feeder = [] && animal.feeder;
feeder.push(Meteor.userId);
Animals.update(animal_id,
{
$set: {
driver_id: '',
status: 'feeding'
feeder: feeder
}
}
)
答案 1 :(得分:0)
可以对同一文档执行多个更新,只要这些更新不冲突(因此"在更新中有#34;有冲突的mod;错误)。
由于"$push" : {"bugs" : [{"name":"bug1", "count":1}]}
和"$inc" : {"bugs.0.count" : 1}
都试图修改文档的相同部分(即"错误"数组),因此它们会发生冲突。
如果每个更新都影响文档的不同部分,则可以合并多个更新: