Meteor 1.0 - MinimongoError: 无法使用字符串字段名 [-1] 附加到数组
Posted
技术标签:
【中文标题】Meteor 1.0 - MinimongoError: 无法使用字符串字段名 [-1] 附加到数组【英文标题】:Meteor 1.0 - MinimongoError: can't append to array using string field name [-1] 【发布时间】:2015-01-06 08:17:51 【问题描述】: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 数组的开头?
【问题讨论】:
【参考方案1】:你需要原子性吗?如果没有,只需修改然后$set
整个数组。
var doc = collectionName.findOne();
doc.arr.unshift('newElement');
collectionName.update(doc._id, $set: 'arr': doc.arr);
否则,听起来您现在需要在服务器端代码中执行此操作。
【讨论】:
这样就解决了,谢谢!我想尽可能减少 I/O...有没有办法将 unshift() 数据直接放入 mongo 数组中,而无需读出数组,修改它,然后将整个数组 $set 回 mongo ? 如果没有$position
,我不知道有什么方法可以做到这一点。以上是关于Meteor 1.0 - MinimongoError: 无法使用字符串字段名 [-1] 附加到数组的主要内容,如果未能解决你的问题,请参考以下文章
Meteor 1.0 - MinimongoError: 无法使用字符串字段名 [-1] 附加到数组
使用 blaze (meteor) 模板引擎在 Iron-icons 中设置的 Polymer 1.0 默认图标不工作
为啥 Meteor.user 和 Meteor.userId 不同?