MongoDB在数组中推送记录

时间:2017-06-17 20:09:13

标签: mongodb meteor

我有一个userAccounts Meteor Mongo数据库,我存储了用户喜欢的用户名和帖子。这是它的外观:

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

我希望每次用户都喜欢其他帖子时,将post._id添加到likesPosts中的postId。所以我做了这样的事情:

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

但由于某种原因,它没有将新的帖子ID推送到数组,它只保留上面插入的第一条记录,因此插入有效。知道我做错了什么吗?提前谢谢!

2 个答案:

答案 0 :(得分: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()
    }]
  });

答案 1 :(得分:0)

这是您使用"Dot notation"的地方,此外您还可以在此处进行$set操作:

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

One"追加到阵列"已创建,另一个"设置新日期"。

虽然命名对我来说似乎有些偏差,也许你的意思是"updatedAt"