相关疑难解决方法(0)

MongoDB原子"findOrCreate":findOne,如果不存在则插入,但不更新

正如标题所说,我想通过_id执行文档的查找(一个),如果不存在,则创建它,然后是否找到它或者是否已创建它,让它在回调中返回.

如果它存在,我不想更新它,因为我读过findAndModify.我在Stackoverflow上看到了很多关于此问题的其他问题,但同样,不希望更新任何内容.

我不确定是否通过创建(不存在),这实际上是每个人都在谈论的更新,它都是如此令人困惑:(

mongodb node.js

108
推荐指数
3
解决办法
5万
查看次数

Mongodb如果不存在,如何插入(如果存在则不更新)?

如果文档不存在而不更新现有文档(如果存在),如何插入文档?

假设我有一份文件如下:

  {
          "company":"test", 
          "name":"nameVal"
}
Run Code Online (Sandbox Code Playgroud)

我想检查集合是否包含公司test,如果它不存在我想创建一个新文档.如果它存在我想做什么都没有.我试过updateupsert = true.但它会更新现有文档(如果存在).

这是我试过的:

db.getCollection('companies').update(
    {
  "company": "test"
  },
  {
  "company": "test",
  "name": "nameVal2"
},
{upsert:true}
)
Run Code Online (Sandbox Code Playgroud)

感谢使用一个查询解决此问题的任何帮助.

mongodb

7
推荐指数
1
解决办法
4380
查看次数

Mongoose:原子 FindOne-Or-Insert(),如果找到则不更新现有实例

在 Mongoose 中,我正在寻求以原子方式执行Model.FindOne-Or-Insert()与当前可用的类似功能和签名的方法,Model.FindOneAndUpdate()除非实例存在(即匹配filter)然后不使用提供的更新object但原样返回找到的实例,如果不存在(即不匹配) with filter) 然后插入object并返回新实例。

我找不到一种方法,Model.FindOneAndUpdate()通过尝试对现有实例进行更改,options并且不提供object不希望在实例存在时不更新的字段来对现有实例执行更新。

因此,我当前的非原子解决方法是Model.FindOne(),如果找不到,则执行Document.save().

const Foo = DB.model('foo', FooSchema)

async function findOneAndUpdateFoo(jsonFoo, next) {

  const filter = {
    deletedAt: null
  }
  if (jsonFoo.dsAccountId) {
    filter.dsAccountId = jsonFoo.dsAccountId
  }
  if (jsonIntegration.dsUserId) {
    filter.dsUserId = jsonIntegration.dsUserId
  }
  if (jsonFoo.providerId) {
    filter.providerId = jsonFoo.providerId
  }

  const fooDoc = {
    name: jsonFoo.name,
    dsAccountId: jsonFoo.dsAccountId,
    dsUserId: jsonFoo.dsUserId, …
Run Code Online (Sandbox Code Playgroud)

atomic mongoose mongodb

3
推荐指数
1
解决办法
1672
查看次数

标签 统计

mongodb ×3

atomic ×1

mongoose ×1

node.js ×1