情况很奇怪,我尝试了很多解决方案,但似乎无法破解。
我发现的很多资源只包括 mongo 控制台命令,我不确定你如何在 Node.js 中编写它。
我试图解决这个问题的原因是我试图让每个文档的“id”从最后一个文档开始迭代,因此尝试查找集合中的文档数量,添加一个,然后使用该数字作为新文档的“id”。
最佳答案
要获取集合中的文档数量,请使用db.collection.find({}).count()
。
但是,您尝试做的事情是行不通的。当您对数据库进行大量并行访问时,多个线程可能会同时执行此操作,接收相同的计数,从而插入具有相同 id 的文档。根据CAP theorem ,像MongoDB这样的分布式数据库无法提供这种一致性。
你应该做的是依赖 MongoDB ObjectId作为文档的唯一标识符。当您没有为 _id
提供自己的值时,MongoDB 会自动为每个文档生成这些值。 ObjectId 是全局唯一的(对于任何实际目的而言都足够唯一),因此您不会遇到任何冲突。它们也以时间戳开头,因此当您按 _id
排序时,您会得到大致的时间顺序(如前所述,分布式系统不可能提供严格时间顺序)。
根据经验,每当您在 SQL 中使用 AUTO_INCRMENT
时,您都可能会在 MongodDB 中使用 ObjectId。
关于node.js - 如何计算 Node 内 MongoDB 集合中的文档数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669811/