仅当MongoDB中不存在新文档时如何插入

加里·基普尼斯(Gary Kipnis)

我有一个具有以下架构的用户集合:

{
_id:ObjectId("123...."),
name:"user_name",
field1:"field1 value",
field2:"field2 value",
etc...
}

通过user.name查找用户,该名称必须是唯一的。添加新用户时,我首先执行搜索,如果找不到该用户,则将新用户文档添加到集合中。搜索用户和添加新用户(如果未找到)的操作不是原子操作,因此,当多个应用程序服务器连接到数据库服务器时,有可能同时接收到两个add_user请求,并且请求相同用户名,导致在两个add_user请求中都找不到这样的用户,从而导致两个文档具有相同的“ user.name”。实际上,这是由于客户端错误导致的,因为只有一台运行NodeJS并使用Async库的应用服务器。

我当时在考虑使用findAndModify,但是这行不通,因为我不是简单地更新已经存在并且可以使用upsert的文档的字段(存在或不存在),而是想插入一个新文档仅当搜索条件失败时。我无法使查询不等于“ user.name”,因为它将找到其他用户。

泽蒙

首先,您应该unique在users集合的name字段上维护索引。如果您使用Mongoose或使用以下语句,则可以在模式中指定它:

collection.ensureIndex('name', {unique: true}, callback);

这将确保name字段保持唯一,并将解决您在问题中指定的并发请求问题。设置此索引时,您不需要搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDb替换文档并在不存在时插入

来自分类Dev

仅当不存在MongoDB文档字段时,才如何更新它们?

来自分类Dev

仅当使用MySQL的值不存在时才如何从表中插入值?

来自分类Dev

如果 MongoDB 中不存在用户名或电子邮件,则创建新文档

来自分类Dev

Python3,MongoDB仅在文档不存在时才插入

来自分类Dev

仅当记录不存在时才插入表

来自分类Dev

MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入

来自分类Dev

如果流星的文档中不存在mongo插入对象

来自分类Dev

仅当数组元素不存在时如何将其插入数据库

来自分类Dev

仅当值不存在时才从SELECT插入表中

来自分类Dev

仅当一个表中的数据不存在时才将其插入

来自分类Dev

仅当 oracle sql 中不存在值时才插入

来自分类Dev

Rethinkdb> = 1.11中不存在的文档时如何自动替换文档

来自分类Dev

如果字段不存在,如何在所有文档中插入字段

来自分类Dev

使用MongoDB更新文档,增加字段并将其设置为0(如果不存在)

来自分类Dev

如果MongoDB Javascript不存在,如何创建文档?

来自分类Dev

mongoDB:数组中不存在的文档的$ inc

来自分类Dev

如果不存在,则仅插入

来自分类Dev

如果文档中不存在数据,则插入–如何用Mongoose插入新字段和数据?

来自分类Dev

当JSON文档中不存在路径时如何使用JSON_ARRAY_APPEND?

来自分类Dev

当记录不存在时插入到表中

来自分类Dev

仅当扩展不存在时,如何启用它?

来自分类Dev

仅当图像不存在时如何下载图像?

来自分类Dev

仅当doc不存在时,Elasticsearch中的批量索引

来自分类Dev

完全更新文档而不创建(如果不存在)

来自分类Dev

在Amazon Redshift中,如何仅在行不存在时才批量插入行?

来自分类Dev

仅当neo4j中不存在节点时如何创建新节点

来自分类Dev

如何使用 Ansible 在文件中添加条目(仅当它不存在时)

来自分类Dev

仅当使用rust在地图中不存在新对象时,才如何将其插入地图?

Related 相关文章

  1. 1

    MongoDb替换文档并在不存在时插入

  2. 2

    仅当不存在MongoDB文档字段时,才如何更新它们?

  3. 3

    仅当使用MySQL的值不存在时才如何从表中插入值?

  4. 4

    如果 MongoDB 中不存在用户名或电子邮件,则创建新文档

  5. 5

    Python3,MongoDB仅在文档不存在时才插入

  6. 6

    仅当记录不存在时才插入表

  7. 7

    MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入

  8. 8

    如果流星的文档中不存在mongo插入对象

  9. 9

    仅当数组元素不存在时如何将其插入数据库

  10. 10

    仅当值不存在时才从SELECT插入表中

  11. 11

    仅当一个表中的数据不存在时才将其插入

  12. 12

    仅当 oracle sql 中不存在值时才插入

  13. 13

    Rethinkdb> = 1.11中不存在的文档时如何自动替换文档

  14. 14

    如果字段不存在,如何在所有文档中插入字段

  15. 15

    使用MongoDB更新文档,增加字段并将其设置为0(如果不存在)

  16. 16

    如果MongoDB Javascript不存在,如何创建文档?

  17. 17

    mongoDB:数组中不存在的文档的$ inc

  18. 18

    如果不存在,则仅插入

  19. 19

    如果文档中不存在数据,则插入–如何用Mongoose插入新字段和数据?

  20. 20

    当JSON文档中不存在路径时如何使用JSON_ARRAY_APPEND?

  21. 21

    当记录不存在时插入到表中

  22. 22

    仅当扩展不存在时,如何启用它?

  23. 23

    仅当图像不存在时如何下载图像?

  24. 24

    仅当doc不存在时,Elasticsearch中的批量索引

  25. 25

    完全更新文档而不创建(如果不存在)

  26. 26

    在Amazon Redshift中,如何仅在行不存在时才批量插入行?

  27. 27

    仅当neo4j中不存在节点时如何创建新节点

  28. 28

    如何使用 Ansible 在文件中添加条目(仅当它不存在时)

  29. 29

    仅当使用rust在地图中不存在新对象时,才如何将其插入地图?

热门标签

归档