javascript - 如何在 MeteorJS 中更新 MongoDB 集合上的子文档数组

标签 javascript arrays mongodb meteor

我在更新 Meteor 中的 mongo 集合时遇到问题。

也许我只是不明白 $addtoset 是如何工作的。

这是我的基本文档,或多或少位于我初始化项目的 fixtures.js 中:

var someUser = Meteor.users.findOne("W9YEs84QFhZzJeB6j");

var NewIdea = Ideas.insert({
  title: "This Is a Title",
  body: "Blah Blah Blah Body Goes Here",
  userId: someUser._id,
  author: someUser.profile.name,
  timestamp: new Date(now - 5 * 3600 * 1000),
  score: [],
  overallScore: 0,
  votedOnBy: [],
  timesVotedOn: 0
});

这是我希望更新后的样子:

{
  _id: "bKXXrpYmppFBfq9Kx",
  title: "This Is a Title",
  body: "Blah Blah Blah Body Goes Here",
  userId: "W9YEs84QFhZzJeB6j",
  author: "Users Name",
  timestamp: ISODate("2016-06-07T20:37:05.775Z"),
  score: [
    {
      userId: ""W9YEs84QFhZzJeB6j",
      score: 1
    }
  ],
  overallScore: 1,
  votedOnBy: [
    "W9YEs84QFhZzJeB6j"
  ],
  timesVotedOn: 1
}

这是我用来更新的代码(不起作用):

Ideas.update("bKXXrpYmppFBfq9Kx", {
  $addToSet: {score: {userId: someUser._id, score: 1}},
  $inc: {overallScore: 1},
  $addToSet: {votedOnBy: someUser._id},
  $inc: {timesVotedOn: 1}
});

这是来自 mongo 控制台的实际文档(更新后):

{
  "_id" : "bKXXrpYmppFBfq9Kx",
  "title" : "This Is a Title",
  "body" : "Blah Blah Blah Body Goes Here",
  "userId" : "W9YEs84QFhZzJeB6j",
  "author" : "Users Name",
  "timestamp" : ISODate("2016-06-07T20:37:05.775Z"),
  "votedOnBy" : [
    "W9YEs84QFhZzJeB6j"
  ],
  "timesVotedOn" : 1
}

请注意,overallScorescore 根本不存在。

我是 Meteor 和 Mongo 的新手(也许这是显而易见的)。有谁知道我在这里做错了什么?或者我需要什么才能正确进行此更新?

最佳答案

重要的是要记住修饰符只是一个对象。以下对象文字:

{
  a: 1, b: 1,
  a: 2, b: 2
}

评估为:

{ a: 2, b: 2 }

因为键被分配了两次,最后一次写入获胜。

在您的代码中,相同的想法适用于 $addToSet$inc 键。要修复它,请像这样编写更新:

Ideas.update("bKXXrpYmppFBfq9Kx", {
  $addToSet: {
    score: { userId: someUser._id, score: 1 },
    votedOnBy: someUser._id
  },
  $inc: {
    overallScore: 1,
    timesVotedOn: 1
  }
});

关于javascript - 如何在 MeteorJS 中更新 MongoDB 集合上的子文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692323/

相关文章:

javascript - Mongoose 和 MongoDB - 似乎在我的集合中找不到文档

javascript - "push-model"在 RxJS/Immutable.js/AngularJS 等上下文中的含义

javascript - 由于某种原因, Mongoose 只保存密码哈希而不是所有字段

ios - 如何将模型类字典中的值存储在 Array/NSMutableArray 中?

mongodb - 从另一个集合中删除 dbref 元素

javascript - mongodb javascript更新

javascript - 在 Select2 中按名称排序

javascript - 在模型更改时刷新 Dojo MVC 组不适用于复杂对象

c - 将指向 char 数组的指针传递给函数

Javascript:在for循环中隐藏原型(prototype)方法?