[英]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
score
和score
根本不存在。
我是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.