2017-06-17 87 views
1

我有一個userAccounts Meteor Mongo數據庫,我存儲了用戶喜歡的用戶名和帖子。這是它的外觀:MongoDB數組推送記錄

userAccounts.insert({ 
    username:Meteor.user().username, 
    likedPosts:{ 
     postId:[this._id], 
     createdAt:new Date() 
    } 
    }); 

我希望每個用戶喜歡的另一篇文章的時候,到post._id添加到在帖子ID的likedPosts。所以我做了這樣的事情:

userAccounts.update(
    Meteor.user().username,{ 
     $push:{ 
     'likedPosts':{ 
      'postId':this._id, 
      'createdAt':new Date() 
     }} 
}); 

但由於某些原因,它不推新帖子ID陣列它只是讓那上面插入第一個記錄,因此插入工作。任何想法我做錯了什麼?提前致謝 !

回答

0

這是在您使用"Dot notation",你居然也有$set操作這裏的日期還有:

userAccounts.update(
    Meteor.user().username, 
    { 
    '$push':{ 'likedPosts.postId': this._id } 
    '$set': { 'likedPosts.createdAt':new Date() } 
    } 
); 

一個「附加到陣列」創建和其它「設置新的日期「。

雖然命名似乎有點偏離,也許你的意思是"updatedAt"那裏。

0

問題可能出在您的選擇器。當updateremove看到一個值作爲選擇器時,他們認爲該值爲_id

相反的:

userAccounts.update({ 
    Meteor.user().username,{ 
     $push:{ 
     'likedPosts':{ 
      'postId':this._id, 
      'createdAt':new Date() 
     }} 
}); 

嘗試:

userAccounts.update({ username: Meteor.user().username }, 
    { $push: { 
    'likedPosts': { 
     'postId':this._id, 
     'createdAt':new Date() 
    } 
    }} 
); 

此外,當你做你的插入用:

userAccounts.insert({ 
    username:Meteor.user().username, 
    likedPosts:{ 
     postId:[this._id], 
     createdAt:new Date() 
    } 
    }); 

likedPosts被初始化爲對象,而不是長度爲1的數組。所以你不能推動它。這樣做,而不是:

userAccounts.insert({ 
    username:Meteor.user().username, 
    likedPosts: [{ 
     postId: [this._id], 
     createdAt: new Date() 
    }] 
    }); 
+0

它似乎沒有區別。 – Roberto