Meteor 1.0是为MongoDB v2.4构建的,它没有Mongo 2.6中引入的$position API。因此,我无法将数组项添加到MongoDB数组的开头:
{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$position: 0
}
}
}
我尝试通过解决方法将项目添加到MongoDB阵列的前面......
collectionName.update(
{_id: 'Xjfb2bbsyj2maFu'},
{$set:
{'field.-1': data}
}
);
...但这仅适用于服务器端代码,MiniMongo无法解释:
I20141109-23:32:42.382(-5)? Error in oplog callback MinimongoError: can't append to array using string field name [-1]
I20141109-23:32:42.382(-5)? at MinimongoError (packages/minimongo/minimongo.js:53)
I20141109-23:32:42.383(-5)? at findModTarget (packages/minimongo/modify.js:133)
I20141109-23:32:42.383(-5)? at packages/minimongo/modify.js:56
I20141109-23:32:42.383(-5)? at Function._.each._.forEach (packages/underscore/underscore.js:113)
I20141109-23:32:42.383(-5)? at packages/minimongo/modify.js:43
I20141109-23:32:42.383(-5)? at Function._.each._.forEach (packages/underscore/underscore.js:113)
I20141109-23:32:42.383(-5)? at Function.LocalCollection._modify (packages/minimongo/modify.js:36)
I20141109-23:32:42.383(-5)? at packages/mongo/oplog_observe_driver.js:597
I20141109-23:32:42.384(-5)? at Object.Meteor._noYieldsAllowed (packages/meteor/fiber_helpers.js:11)
I20141109-23:32:42.384(-5)? at _.extend._handleOplogEntrySteadyOrFetching (packages/mongo/oplog_observe_driver.js:545)
将项目添加到与Meteor 1.0 / MiniMongo兼容的MongoDB阵列的开头有什么解决方法?
答案 0 :(得分:1)
你需要原子性吗?如果没有,只需修改整个数组$set
。
var doc = collectionName.findOne();
doc.arr.unshift('newElement');
collectionName.update(doc._id, {$set: {'arr': doc.arr}});
否则,听起来你现在需要在服务器端代码中这样做。