2017-06-17 88 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