使用快速/猫鼬用新的对象数组替换以前的对象数组

时间:2020-04-27 00:38:39

标签: node.js mongoose

我正在尝试更新数据库中的收藏夹数组,但是似乎无法更新?我已经搜寻了很多年,试图找到解决方案,但是似乎没有任何效果。

我将ID保存在cookie中,并在发出更新请求时将其发送到正文中...

“已选择”是对象数组。这就是需要将的内容替换为favouriteStations属性,如果为空,则将其添加。

数据库结构如下:

"id": id,
"email: "test@test",
"password": "test",
"userInfo": {
    "firstName": "test",
    "lastName": "test",
    "favouriteStations": [{array i want to replace}]
}

我尝试了许多不同的组合,但是到目前为止,这是我所没有的,

app.post("/api/update", (req, res) => {
  console.log("updating user details");
  const { id, selected } = req.body;

  UserModel.findOneAndUpdate(
    { _id: id },
    { userInfo: { favouriteStations: { $set: selected } } },
    { useFindAndModify: false }
  )
    .then((user, err) => {
      if (err) {
        console.log("an error?");
        res.status(500).json({
          error: "Server error",
        });
      } else if (!user) {
        console.log("user not exists?");
        res.status(401).json({
          error: "Incorrect credentials",
        });
      } else {
        console.log("updated?");
        console.log(user);
      }
    })
    .catch((err) => {
      console.log(err);
    });
});

1 个答案:

答案 0 :(得分:1)

您不清楚“ ..它不起作用”是什么意思,请您详细说明一下,即收到什么错误?如果没有,怎么办?

$set运算符应以MongoDB docs的以下格式使用:

{ $set: { <field1>: <value1>, ... } }

这就是说,您可能无法正确访问favouriteStations,请按如下所示使用点号来访问子文档:

...
    UserModel.findOneAndUpdate(
        { _id: id },
        { $set: {'userInfo.favouriteStations': selected} } ,
        { useFindAndModify: false }
      )
...
相关问题