我使用流星包进行流星应用程序更新.我想重新定位mongo文档数组中的项目.为了实现这一点,我$pull
把它从数组中,然后根据mongoDB文档$push
在特定index
位置.
MyCollection.update({_id: my_doc.id}, { $push: { my_array: { $each:[my_item.id], $position:index } } } )
Meteor/Mongo抛出以下错误:
更新失败:MongoError:无法规范化查询:BadValue未知顶级运算符:$ each
我首先实现了这个客户端.我认为它因为最小限制而无效.
我写了一个方法来处理这个服务器端,但我最终得到了同样的错误.
这个请求有什么问题,meteor可以处理$ each运算符吗?
编辑:我试图直接插入robomongo,它的工作原理.Mongo版本,当键入时db.version()
返回2.6.7
*EDIT2:我没想到它所以我之前没有检查过:更新工作,无论是$pull
和$push
.但是,即使数据实际更新,我仍然会收到错误.
*编辑:这是一些示例数据:
{ "_id" : "oSNrpgAAu8BuznvD6", "name" : "tynhjderjye", "description" : "", "notes" : "", "display_notes" : false, "keywords" : [ "" ], "owner" : "mA5Y7LBCoRyeSDkaG", "createdAt" : ISODate("2015-10-27T13:59:06.083Z"), "createdBy" : "C3i9oj4eapyttHZj6", "contributors" : [ "C3i9oj4eapyttHZj6" ], "medias" : [ "TcFqermNY4y5cjBG3", "dbkNN2rxXJXth8urw", "jML4JKkRoKxx8sLwu", "LEWYsnPrXRSH6MPkX" ], "modifiedAt" : ISODate("2015-11-17T09:35:50.303Z"), "modifiedBy" : "C3i9oj4eapyttHZj6", "chunks" : [ "qCCHKJDbdTLEFR5Yt", "ySiM7dcxvduEM2npj", "5q46vqrmYttscitiK" ], "trashed" : ISODate("2015-11-17T09:35:50.303Z") }
chunks
是my_array
我拉动并推动my_item.id
位置的阵列index
如果你创建一个Meteor Collection,new Mongo.Collection('col')
你会得到一个不是本地Node MongoDriver的Minimongo实例,对吧?
所以有些方法不起作用或不完全支持..就像 collection.aggregate
但您可以通过Col.rawCollection()
本机实例轻松访问本机驱动程序并直接执行查询.当然,只能在服务器上访问本机实例.
所以要做你想做的事,你有几种方法,例如你可以先拿出阵列,按你想要的方式使用它
$set: {my_array: sortedArray }
我个人更喜欢这种方式因为你只需要做一次更新操作而不是两次($pull
&$push at $position
)
但是如果你想以$ position的方式进行$ push ...就像使用本机驱动程序一样
var col = Collection.rawCollection(); var result = Meteor.wrapAsync(col.update.bind(col)( /* update query goes here */ );
注意:由于Meteor同步风格,你需要Meteor.wrapAsync,你也可以不用它.Collection.rawCollection().更新(...)