2016-06-08 62 views
0

我在更新Meteor中的mongo集合時遇到問題。如何更新MeteorJS中的MongoDB集合上的子文檔數組

也許我只是不明白如何$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} 
}); 

下面是從蒙戈控制檯的實際文件(更新之後):

{ 
    "_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的新手(可能很明顯)。有誰知道我在這裏做錯了嗎?或者我需要什麼,以便我可以做這個更新是正確的?

+0

感謝@Michel弗洛伊德的代碼編輯:)這是乾淨多了,現在,您刪除從數據庫輸出其他非必要信息。 –

+0

我需要這樣做,試圖找出你的問題。不幸的是你的代碼看起來是正確的,所以我仍然缺少解決方案 –

回答

2

請務必記住,修飾符只是一個對象。以下對象的文字:

{ 
    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 
    } 
}); 
+0

非常感謝您的幫助。我按照你的說法修改了我的代碼,但是當我從數據庫運行db.ideas.find()時,我得到一個空的分數對象。這裏有一個詳細的要點:https://git.io/voqLK –

+0

由於這是獲取大部分數據到文檔中,我假設我會接受這個答案。並希望這樣做。我只是不確定我能否將對象放入我的文檔中,因爲我無法驗證它是否真的會進入我的數據庫。一旦我明白了這一點,我會接受你的答案。如果我需要修改代碼以使其符合我的需求,我會這樣做 - 然後接受您的答案。再次,謝謝! –

+0

我接受了這個答案 - 因爲顯然你是對的。你解決了我的第一個問題。現在我有第二個問題,我已經打開了一個新的問題:http://stackoverflow.com/questions/37705040/how-to-return-subdocuments-from-an-object-in-an-array-with-meteor -and-mongodb –

相關問題