当前位置: 首页 > 知识库问答 >
问题:

mongoose更新,对数组执行push操作,对对象执行set操作

翟鹏
2023-03-14

我有一个猫鼬模式

var ContactSchema = module.exports = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  phone: {
    type: Number,
    required: true,
  },
  messages: [
  {
    title: {type: String, required: true},
    msg: {type: String, required: true}
  }],
  address:{ city:String,
            state:String
  }
});

我最初设置了名称和电话字段的集合。我需要将集合更新为消息数组中的新消息和新地址到地址对象中。该函数还必须处理任何单个操作,即在某些情况下我只更新到消息数组或更新到名称和地址。所以我如何在单个函数中执行所有操作。

        var messages= {
            title: req.body.title,
            msg: req.body.msg
        }
        Model.findOneAndUpdate({'_id': req.body.id,},{$push: {messages:message}},{upsert: true}, function (err, data) {
            if (err) {
                return res.status(500).send(err);
            }
            if (!data) {
                return res.status(404).end();
            }
            return res.status(200).send(data);
        });

共有1个答案

曹振
2023-03-14

您可以尝试在更新对象中同时使用$set$ush运算符。例如,假设您想在一个操作中更新名称和地址字段,请使用名称字段上的$set和对地址数组的$推送操作:

var messages= {
    title: req.body.title,
    msg: req.body.msg
},
query = {'_id': req.body.id},
update = {
    $set: {name: req.body.name},
    $push: {messages: message}
},
options = {upsert: true};

Model.findOneAndUpdate(query, update, options, function (err, data) {
    if (err) {
        return res.status(500).send(err);
    }
    if (!data) {
        return res.status(404).end();
    }
    return res.status(200).send(data);
});
 类似资料:
  • 我知道这应该很简单,但是我想从熊猫数据框中取一列,并且只对满足某些条件(比如小于1)的条目乘以标量(比如2)。 例如,在这个数据框中, 如果我有兴趣在列上执行此操作,结果应该是 我有以下绝对任务: 但是我不知道如何使用中的实际值。 提前谢谢!

  • 本文向大家介绍Dapper.NET 针对多组输入执行操作,包括了Dapper.NET 针对多组输入执行操作的使用技巧和注意事项,需要的朋友参考一下 示例 有时,您想多次做同一件事。Execute如果实际上将最外面的参数(通常是单个匿名类型或域模型实例)提供为IEnumerable序列,则Dapper在方法上支持此方法。例如: 在这里,dapper只是对我们的数据做一个简单的循环,基本上和我们做的一

  • 我有一个java。util。流动包含键值对的流,如: 现在,我想合并所有具有相同密钥的条目: 数据已经排序,因此只需合并连续的数据集。 现在,我正在寻找一种方法来转换上述流的内容,而不将所有数据集加载到内存中。 我更喜欢得到一个java.util.stream.Stream,结果是一个不同的对象类型包含一个值列表,而不是一个单独的值。 我唯一的方法是一个自定义迭代器,它执行合并,但是转换为迭代器并

  • 我们使用HiberNate作为JPA提供程序。当其中一个实体更新时,我需要对Quartz计划执行一些更新。目前,该代码是在该实体的更新方法中调用的。但是,Quartz更改只有在事务成功提交时才会生效。 我考虑过实现一个实体监听器,但是我只想在实体被特定方法修改时执行这些更新,并且我不确定JPA实体监听器是否支持依赖注入,我需要依赖注入来获取对Quartz调度器的引用。 有没有办法以编程方式附加活动

  • 我的意图是对进行简单的克隆,但在此之前,我在修改列表时遇到了一个问题。在列表中添加另一个元素 为什么?