如果不存在但不更新,如何在猫鼬中创建
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();
【讨论】:
以上是关于如果不存在但不更新,如何在猫鼬中创建的主要内容,如果未能解决你的问题,请参考以下文章