如何使用Node.js实现所需的功能

时间:2018-11-20 20:49:49

标签: javascript node.js mongodb mongoose

这是我的要求

将ID数组传递给某个函数,该函数将执行以下操作

  1. 如果是,请检查Mongodb中是否存在文档;如果否,请跳至下一个id。

  2. 如果db中所有数组的ID存在,则返回一条消息,如果不返回消息,则所有ID都存在。

尝试了几种方法,但没有成功。

我遇到的问题,缺少创建的文档,但是在创建完成之前,首先返回所有id已存在的消息。

尝试使用异步但有点帮助。尝试使用数组长度和找到的文档数返回未定义。

**我使用的是mongo本机客户端,在这种情况下mongo查询绝对没有问题。问题出在Node.js上。在上一步完成之前,节点立即执行所有操作,并且我知道节点不是顺序的。由于查找文档并创建文档需要花费时间,因此首先执行下一步,然后在完成所有数据库过程之后再执行。我正在寻找一种解决方案,该解决方案将按顺序逐步进行。

2 个答案:

答案 0 :(得分:0)

自从我使用MongoDB已经有一段时间了,但是,如果我记得,有一个class class1(object): def __init__(self): self.create() def create(self): self.v = 6 class class2(object): def __init__(self,class1): self.print(class1) def print(self,class1): print(self.v) c = class1() c1 = class2(c) 标志。您可以对upsert进行upsert,这将为您创建具有这些ID的空白文档。请确保备份数据库,以防万一您忘记放置数据库,因为否则它将同时更新所有旧文档,并将其空白。为此,应该几乎不需要nodejs,因为mongo在其查询语言中为您提供了该功能。至于$set:{_id: id}位,我确定upsert的文档中包含一些有用的信息:
https://docs.mongodb.com/manual/reference/method/Bulk.find.upsert/

编辑:
我更深入地挖掘。 Upsert可能仅适用于单个文档更新。在这种情况下,您应该只遍历您的ID,并为每个ID运行单独的更新。
https://docs.mongodb.com/manual/reference/method/db.collection.update/#upsert-parameter

答案 1 :(得分:0)

如果需要输出创建的文档数组,最简单的方法是使用find。但是,如果您只需要计数新元素,并且它们具有相同的结构,则可以使用update运算符的技巧。看起来像update({ id: { $nin: arrayOfId }}, { $set: newDoc }, { upsert: true }),其中newDoc是新文档的结构,而arrayOfIdid的数组(您可以使用_id同样的方法)。此操作将返回新文档的数量。

如果在组件创建之前尝试从角度进行请求,请使用preloader。并且,在获得结果之后-将其显示给用户。希望对您有帮助。