17

我正在使用最新的流星包开发流星应用程序。我想在 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

我首先实现了这个客户端。由于 minimongo 的限制,我认为它不起作用。

我写了一个方法来处理这个服务器端,但我最终得到了同样的错误。

这个请求有什么问题,流星可以处理 $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.idindex

4

1 回答 1

5

如果你创建一个 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().update(...)

于 2015-12-22T19:37:11.227 回答