我有一个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推送到数组,它只保留上面插入的第一条记录,因此插入有效。知道我做错了什么吗?提前谢谢!
答案 0 :(得分:0)
问题可能在于您的选择器。当update
和remove
将单个值视为选择器时,他们会认为该值为_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"
。