当前位置:  开发笔记 > 编程语言 > 正文

meteor mongo驱动程序可以处理$ each和$ position运算符吗?

如何解决《meteormongo驱动程序可以处理$each和$position运算符吗?》经验,为你挑选了1个好方法。

我使用流星包进行流星应用程序更新.我想重新定位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")
}

chunksmy_array我拉动并推动my_item.id位置的阵列index



1> webdeb..:

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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有