Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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
Meteor-MongoDB错误:无法将$addToSet修饰符应用于非数组_Mongodb_Meteor - Fatal编程技术网

Meteor-MongoDB错误:无法将$addToSet修饰符应用于非数组

Meteor-MongoDB错误:无法将$addToSet修饰符应用于非数组,mongodb,meteor,Mongodb,Meteor,我正在关注艾萨克·斯特拉克最近出版的一本书。这本书使用Meteor 0.5.0。我正在使用0.5.4版 在这本书中,您构建了一个包含几个类别的应用程序,您可以在其中插入用于跟踪家用物品的数据,以及这些物品可能借给谁。我将应用程序部署到了一个服务器上,它工作得非常好。它不会复制我的本地MongoDB错误 我在第5章,我刚刚从应用程序中删除了autopublish,并为数据指定了我的本地频道 在本地,仅在“工具”类别下,当我尝试向该类别添加新项目时,我在浏览器控制台中收到以下错误: Excepti

我正在关注艾萨克·斯特拉克最近出版的一本书。这本书使用Meteor 0.5.0。我正在使用0.5.4版

在这本书中,您构建了一个包含几个类别的应用程序,您可以在其中插入用于跟踪家用物品的数据,以及这些物品可能借给谁。我将应用程序部署到了一个服务器上,它工作得非常好。它不会复制我的本地MongoDB错误

我在第5章,我刚刚从应用程序中删除了autopublish,并为数据指定了我的本地频道

在本地,仅在“工具”类别下,当我尝试向该类别添加新项目时,我在浏览器控制台中收到以下错误:

Exception while simulating the effect of invoking '/Lists/update' Error {} Error: Cannot apply $addToSet modifier to non-array
    at Error (<anonymous>)
    at LocalCollection._modifiers.$addToSet (http://localhost:3000/packages/minimongo/modify.js?e7f02f0df0bff9f0b97236f9548637b7ede1ac74:178:13)
    at Function.LocalCollection._modify (http://localhost:3000/packages/minimongo/modify.js?e7f02f0df0bff9f0b97236f9548637b7ede1ac74:53:9)
    at LocalCollection._modifyAndNotify (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:474:19)
    at LocalCollection.update (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:444:12)
    at m.(anonymous function) (http://localhost:3000/packages/mongo-livedata/collection.js?3ef9efcb8726ddf54f58384b2d8f226aaec8fd53:415:36)
    at http://localhost:3000/packages/livedata/livedata_connection.js?367884963b120d457819216ff713b2586b266dde:540:25
    at _.extend.withValue (http://localhost:3000/packages/meteor/dynamics_browser.js?46b8d1f1158040fcc2beb7906ec2f932871a398d:21:19)
    at _.extend.apply (http://localhost:3000/packages/livedata/livedata_connection.js?367884963b120d457819216ff713b2586b266dde:539:47)
    at Meteor.Collection.(anonymous function) [as update] (http://localhost:3000/packages/mongo-livedata/collection.js?3ef9efcb8726ddf54f58384b2d8f226aaec8fd53:266:23) logging.js:30
update failed: Internal server error logging.js:30
但是,屏幕输出为空白:

当然,我已经尝试重新启动meteor服务器&关闭浏览器,但没有解决方案。我是MongoDB的新手,所以我不清楚该从何处着手来理解是什么导致了这个问题,或者为什么

你可以。您可以在我的计算机上查看代码

似乎您正在尝试将对象添加到集合中。您在模拟中遇到错误。让我们调查一下那个错误。出错的代码:

哦,
抛出错误(“无法将$addToSet修饰符应用于非数组。”)

看看你的代码:

Object
  Category: "Tools"
  _id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
  items: Object
...
items
是一个对象,而不是数组!它会出错的

您能否使用Mongo将
$addToSet
设置为对象?让我们看看代码

不!这是来自古老的Mongo代码,因为当代的代码库非常庞大,但也是一样的

我在您的代码中只找到一个
insert

'keyup #add-category': function(e, t) {
  if (e.which === 13) {
    var catVal = String(e.target.value || "");
    if (catVal) {
      lists.insert({Category:catVal});
      Session.set('adding_category', false);
    }
  }
},
尝试
列表。插入({Category:catVal,items:[]})
。因此,项目在第一次使用时被初始化为数组而不是对象

<> p>也不认为<代码> $AdtoStE> <代码>以一种数组的方式比较对象,不管怎样,请考虑制作一个单独的集合<代码>项目,其中包含<代码>分类ID
它在一个地方工作,而不是在另一个地方工作,这纯粹是巧合。

遵循相同的指南,我遇到了同样的问题。当直接使用指南中的插件(工具和DVD)时,minimongo将项目作为对象而不是阵列插入。我不知道这是否仅仅是一个错误,或者代码库是否发生了变化,无论是哪种方式,我都改变了:

lists.insert({Category:"DVDs", items: {Name:"Mission Impossible", Owner:"me", LentTo:"Alice"}});


只需将项目封装在[]中以强制将其放入数组,并对工具的insert进行了类似操作。现在效果很好。

是不是只有工具才能做到这一点?你能试着运行meteor reset(请备份你所有的资料,然后清除数据库)看看它是否仍然发生吗?我觉得它是数据库,因为当你部署到meteor.com时,它使用了一个新的db@Akshat成功了,谢谢你!是的,只有“工具”不配合。您可能以前在教程中手动添加了它,但项目使用了错误的数组类型(我怀疑是关联的,使用的是卷曲括号{}而不是直括号[])@Akshat我认为您完全正确。如果你把这个转换成一个答案,我会欣然接受。嘿,我面临着同样的问题,是的,“流星重置”似乎解决了这个错误。极好的反应!深入探讨这个问题,我相信您刚刚在我下面的教程中提出了一个问题。这本书从未明确说明在这种提交类型中使用数组而不是对象的必要性。目前,我通过运行meteor reset(流星重置),通过对我的答案的评论,解决了这个问题,但您似乎在这本书中发现了一个更大的问题。
Object
  Category: "Tools"
  _id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
  items: Object
...
 case ADDTOSET: {
            uassert( 12592 ,  "$addToSet can only be applied to an array" , in.type() == Array );
            ...
        }
'keyup #add-category': function(e, t) {
  if (e.which === 13) {
    var catVal = String(e.target.value || "");
    if (catVal) {
      lists.insert({Category:catVal});
      Session.set('adding_category', false);
    }
  }
},
lists.insert({Category:"DVDs", items: {Name:"Mission Impossible", Owner:"me", LentTo:"Alice"}});
lists.insert({Category:"DVDs", items: [{Name:"Mission Impossible", Owner:"me",LentTo:"Alice"}]});