Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb meteor mongo驱动程序可以处理$each和$position操作员吗?_Mongodb_Meteor_Minimongo - Fatal编程技术网

Mongodb meteor mongo驱动程序可以处理$each和$position操作员吗?

Mongodb meteor mongo驱动程序可以处理$each和$position操作员吗?,mongodb,meteor,minimongo,Mongodb,Meteor,Minimongo,我使用最新的meteor bundle开发meteor应用程序。我想在mongo文档数组中重新定位项目。为了实现这一点,我将它从数组中拉出,然后将它推到特定的索引位置 Meteor/Mongo抛出以下错误: 更新失败:MongoError:无法规范化查询:BadValue未知 顶级操作员:$每个 我首先实现了这个客户端。我认为它不起作用是因为minimongo的限制 我编写了一个方法来处理这个服务器端,但最终还是出现了相同的错误 这个请求有什么问题,meteor能处理每个操作员的$1吗 编辑:

我使用最新的meteor bundle开发meteor应用程序。我想在mongo文档数组中重新定位项目。为了实现这一点,我将它从数组中拉出,然后将它推到特定的索引位置

Meteor/Mongo抛出以下错误:

更新失败:MongoError:无法规范化查询:BadValue未知 顶级操作员:$每个

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

我编写了一个方法来处理这个服务器端,但最终还是出现了相同的错误

这个请求有什么问题,meteor能处理每个操作员的$1吗


编辑:我试着直接在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_数组
我在
index
位置拉推
my_item.id
如果你用
新建Mongo.Collection('col')
创建Meteor集合,你会得到一个不是本机节点MongoDriver的Minimongo实例,对吗

因此,有些方法不起作用或不完全受支持。。如
collection.aggregate

但是您可以通过
Col.rawCollection()
轻松访问本机驱动程序,并直接在本机实例上执行查询本机实例当然只能在服务器上访问

所以,要想做你想做的事,你有几种方法,例如,你可以先使用数组,按照你的意愿使用它,然后

$set:{my_数组:sortedArray}
就个人而言,我更喜欢这种方式,因为您只需要执行一次更新操作,而不是两次(
$pull
&
$push at$position

但是如果你想用$push在$position的方式来做。。只需使用本机驱动程序即可

var col = Collection.rawCollection();
var result = Meteor.wrapAsync(col.update.bind(col)(
  /* update query goes here */
);

注意:你需要Meteor.wrapAsync,因为Meteor同步风格,你也可以不用它Collection.rawCollection().update(…)

您的MongoDB服务器的版本是什么?尝试在
mongo
shell客户端中执行相同的命令。@DmytroShevchenko相同的命令在RoboMongo中工作正常(我想相当于shell客户端)。@Billybobbonne如果该命令在RoboMongo中对同一服务器工作,然后问题是Meteor的MongoDB驱动程序,而不是服务器的版本。我相应地更新了问题标题和内容。感谢您提供有关使用Meteor的本机mongo驱动程序的提示。然而,这是行不通的。我不明白。你的技术也有同样的错误。似乎原因是
$each
中的id。然而,我检查了它的类型(字符串),有没有将它放入数组,我检查了它是否匹配数据库中的真实内容,最后我在一个直接mongo请求中检查了它。Mongo请求起作用,meteor的
update
命令和我问题中的代码起作用,但它仍然会触发那里提到的错误(无论是否使用
rawCollection()
技术)。我可能会切换到使用
$set
的方法,并替换整个数组,这可能会解决问题。然而,我仍然不知道为什么会发生这个错误,这让我感到困扰:-)很抱歉让赏金变质,我想你已经得到了一半的赏金。我不会将这个答案标记为已接受,以防有人拿出真正的答案。感谢你和所有的评论者的帮助。
var col = Collection.rawCollection();
var result = Meteor.wrapAsync(col.update.bind(col)(
  /* update query goes here */
);