使用$ addToSet添加到集合中不存在的数组

时间:2015-05-02 08:27:56

标签: mongodb meteor

这应该很简单。我有两个集合,其中一个集合包含两种类型的数据(名称,年龄),另一个集合应该只是将年龄值添加到数组中(没有重复)。

我像往常一样“开始”我的收藏品:

People = new Mongo.Collection('people')
Ages = new Mongo.Collection('ages')

现在我正在使用种子数据,但问题很容易扩展到我真正想要动态地向数组添加数据的时候。我这样播种:

Meteor.startup(function() {

  if (People.find().count() === 0) {
    [
      {
        name: 'John',
        age: '24' //Yes, I want to store it as strings.
      },
      { ... } //more data
    ]
    .forEach(function(person) {
      People.insert(person)
      Ages.update({ $addToSet: {age: person.age}}) //Not working
    })
  }
})

最后一部分有什么不起作用。我想我认为$addToSet会为我解决问题,因为文档说:

  

如果要更新的文档中没有该字段,则$ addToSet会创建   具有指定值作为其元素的数组字段。

现在我想我必须首先创建该字段,但我不确定在哪里或如何。我有一种强烈而强烈的感觉,我在这里忽略了一些非常简单的事情......

1 个答案:

答案 0 :(得分:0)

现在,我看到你正在定义你的人物收藏品,但我没有看到你真正定义了" "或" 年龄"任何地方。也许这只是因为你如何格式化你的答案。

无论哪种方式,我都不能完全确定你会发生什么事情。据我所知,您需要每次循环选择文档,因为您想要更新它们。

这就是我在我正在处理的应用中做类似事情的方式:

Meteor.users.update({ _id: Meteor.userId() }, { $addToSet: { 'profile.viewedRequests' : this._id }});

在尝试更新单个文档之前,我选择了一个单独的文档。

它或者你需要切换到People.update。