簡體   English   中英

如何在MeteorJS中更新MongoDB集合上的子文檔數組

[英]How to Update An Array of Subdocuments on a MongoDB Collection in MeteorJS

我在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
}

注意, overallScore scorescore根本不存在。

我是Meteor和Mongo的新手(也許很明顯)。 有人知道我在做什么錯嗎? 還是我需要什么以便我可以正確執行此更新?

重要的是要記住,修飾符只是一個對象。 以下對象文字:

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

計算結果為:

{ a: 2, b: 2 }

因為密鑰被分配了兩次,最后一次寫入獲勝。

在您的代碼中,相同的想法也適用於$addToSet$inc鍵。 要解決此問題,請像這樣編寫update

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM