我想把日期/文字推送到我的用户表userLog
usersTable.update (
{ _id: userID },
{ $set:
{
activityDate : Math.round(new Date().getTime()/1000),
$push: {
userLog : {
date: Math.round(new Date().getTime()/1000),
text: "Foo Baaaah!!"
}
}
}
}
).exec()
但是Mongoose发射的所有东西都是:
Mongoose: users.update({ _id: 'torben@rudgaard.com' }, { '$set': { activityDate: 1498158837 } }, {})
我的$ push去了哪些想法?
答案 0 :(得分:2)
正如评论中已经提到的,$push
运算符必须与$set
处于同一级别。它们都是Update Operators,这意味着您可以使用以下格式指定更新表达式:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
因此,在您的情况下,查询必须如下所示:
usersTable.update(
{ _id: userID },
{
$set: {
activityDate: Math.round(new Date().getTime() / 1000),
},
$push: {
userLog: {
date: Math.round(new Date().getTime() / 1000),
text: "Foo Baaaah!!"
}
}
}
).exec();
关于$push
与$addToSet
,完全取决于用例。正如您已经提到的,$addToSet
如果已包含项目,则不会向该数组添加项目。 $push
将始终添加给定元素,无论它是否存在。