这是我的要求
将ID数组传递给某个函数,该函数将执行以下操作
如果是,请检查Mongodb中是否存在文档;如果否,请跳至下一个id。
如果db中所有数组的ID存在,则返回一条消息,如果不返回消息,则所有ID都存在。
尝试了几种方法,但没有成功。
我遇到的问题,缺少创建的文档,但是在创建完成之前,首先返回所有id已存在的消息。
尝试使用异步但有点帮助。尝试使用数组长度和找到的文档数返回未定义。
**我使用的是mongo本机客户端,在这种情况下mongo查询绝对没有问题。问题出在Node.js上。在上一步完成之前,节点立即执行所有操作,并且我知道节点不是顺序的。由于查找文档并创建文档需要花费时间,因此首先执行下一步,然后在完成所有数据库过程之后再执行。我正在寻找一种解决方案,该解决方案将按顺序逐步进行。
答案 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
是新文档的结构,而arrayOfId
是id
的数组(您可以使用_id
同样的方法)。此操作将返回新文档的数量。
如果在组件创建之前尝试从角度进行请求,请使用preloader。并且,在获得结果之后-将其显示给用户。希望对您有帮助。