在Meteor&中更新/ upsert / insert到嵌套集合MongoDB的

时间:2016-03-30 08:43:12

标签: javascript mongodb meteor

我有这个集合和架构:

Words = new Mongo.Collection("words");

WordsSchema = new SimpleSchema({
  date: {
    type: String
  },
  owner: {
    type: String
  },
  entries: {
    type: [Entry]
  }
});

Entry = new SimpleSchema({
  post: {
    type: String
  },
  elapsed_time: {
    type: Number
  },
  createdAt: {
    type: Date
  }
});

Words.attachSchema( WordsSchema );

我只是尝试通过UPSERT(或使用upsert = true更新)向此集合添加条目,如下所示:

Words.update({
      date: today,
      owner: Meteor.userId()
    }, {
      $push: {
        entries: { post: post, elapsed_time: elapsed_time, createdAt: new Date() }
      }
    }, {
      upsert: true
    });

即。如果存在date = today(存储为'YYYY-MM-DD')和owner = userId的对象,则只添加特定条目。

但是我做错了,因为我收到了错误:“条目是必需的”。

非常感谢任何帮助或想法!感谢。

1 个答案:

答案 0 :(得分:1)

我不确定这有什么问题。但我想键入:[Entry]不支持简单模式。所以在这里你可以尝试这两种方法来实现相同的功能。 Marge两个架构。

WordsSchema = new SimpleSchema({
  date: {
    type: String
  },
  owner: {
    type: String
  },
  entries: {
    type: Array
  }
  "entries.$": {
    type: Object
  },
  "entries.$.post: {
    type: String
  },
  "entries.$.verified": {
    type: Boolean
  },
"entries.$.verified": {
    type: Boolean
  }
});

2。通过使用$,您可以分离两个模式

WordsSchema = new SimpleSchema({
  date: {
    type: String
  },
  owner: {
    type: String
  },
  entries: {
    type: Array
  }
  "entries.$": {
    type: Entry
  }
});

Entry = new SimpleSchema({
  post: {
    type: String
  },
  elapsed_time: {
    type: Number
  },
  createdAt: {
    type: Date
  }
});