如果不存在但不更新,如何在猫鼬中创建

Posted

技术标签:

【中文标题】如果不存在但不更新,如何在猫鼬中创建【英文标题】:How to create in mongoose if not exists but not update 【发布时间】:2020-05-02 12:12:54 【问题描述】:

我只找到了创建或更新文档的方法。如果不存在我需要创建,但如果它已经存在则什么都不做。如何在猫鼬中做到这一点?

请注意 findOneAndUpdate 不起作用,因为如果它找到文档,它会更新它!我不想那样。

更新:

我只想创建一个名为order_number 的变量,它可以递增。但是,要增加,我必须确保文档存在。但是,我无法更新它的值如果它存在

我试过了:

let r = await OrderNumber.findOneAndUpdate( unique: 0 ,  unique: 0, order_number: 0 ,  upsert: true );

不存在时创建成功,但总是将order_number更新为0。我不希望这种情况发生。

【问题讨论】:

这能回答你的问题吗? How do I update/upsert a document in Mongoose? 查看answer @SuleymanSah upsert 和 findOneAndUpdate 的问题在于,如果它已经存在,它会更新。我不想那样做。如果不存在,我只想创建一个新文档。但永远不要更新。 @GuerlandoOCs :你能给我一个示例文档和所需的 o/p..我想检查你的文档是什么以及你的过滤器查询是什么,也许你不需要做 .findOneAndUpdate。 . @srinivasy 我更新了问题,请看一下 【参考方案1】:

作为我通过两个数据库调用找到它的唯一方法,因为通常插入没有任何过滤器,除非使用 updates 上的 findOneAnd*upsert - 我们没有看到。然后唯一的选择是进行两次调用,这是基本代码,请将它们包装在适当的函数中 & try/catch 以添加错误处理:

const mongoose = require('mongoose')
const Schema = mongoose.Schema;

const orderNumberSchema = new Schema(
    any: 
, 
    strict: false
);

const OrderNumber = mongoose.model('order_number', orderNumberSchema, 'order_number');

let resp = await OrderNumber.findOne( unique: 0 );

if (!resp) 
    let orderNumberObj = new OrderNumber( unique: 0, order_number: 0 )
    let r = await orderNumberObj.save();

【讨论】:

以上是关于如果不存在但不更新,如何在猫鼬中创建的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中插入自动增量编号

在猫鼬中创建和查找地理位置

我应该在哪里在猫鼬中创建索引

Nest.js - 在猫鼬模式中创建索引

在猫鼬预中间件中,我如何访问更新查询?

在猫鼬中,如果我正在创建一个包含 4 个字段的模式。但我只保存两个字段的值。如何更新未给出的字段值?