首页 > 解决方案 > Mongoose 查询数组...改变数组的元素

问题描述

我试图从 MongoDB 数据库中的数组中删除所有元素,然后插入所有新的数组元素。

我的模型是:

 const mongoose = require('mongoose');
var schema = new mongoose.Schema({
    email : {
        type : String
    },
    password : {
        type : String
    },
    stocks : {
        type : [String]
    }
}, {versionKey:false}, {_id: false});
module.exports =  final = mongoose.model('users', schema);

然后我的股票数组将具有一些值。我正在尝试使用以下命令删除这些值:我在 Stack Overflow 的某个地方读到,要清空数组,您可以做很多事情,但一组是最快的方法。如果您知道其他比这更好的方法,请告诉我。

final
  .findOneAndUpdate({email:"abcd@gmail.com"}, {$set:{stocks:[]}})
  .then(()=>console.log("Data removed."))
  .catch(err=>console.log(err));

一旦数据被删除,这意味着数组将被清空。然后我从我的局部变量中分配整个新数组,如下所示:

const newData = {
  stocks : ["abcd", "wxyz"]
};

现在我正在尝试使用以下命令将这个新数组分配给我的数据库:

final
  .findOneAndUpdate({email:"abcd@gmail.com"}, {$set:{stocks:newData.stocks}});

它正在成功清空数组,但是当我分配新数组时它不起作用并显示一个空数组。请问有人可以帮我吗?

标签: arraysnode.jsmongodbmongoosemongodb-query

解决方案


尝试

final.findOneAndUpdate({email:"abcd@gmail.com"}, {$set:{stocks:newData.stocks}}, {new: true})
    .then((doc)=>console.log(doc))
    .catch(err=>console.log(err));

如果您不使用回调,则不会执行查询。

如果回调被传递,则查询执行,否则返回一个 Query 对象。 猫鼬文档


推荐阅读