结合两个 $exists en MongoDB .find

Combining two $exists en MongoDB .find

我想使用 $exists 查找包含某些字段的文档。特别是,我对两个领域感兴趣:payload.fields.MDI_CC_DIAG_DTC_LISTpayload.asset.

如果我只想查找包含第一个文档的文档,这是我的查询:

db.getCollection("dtc").find({"payload.fields.MDI_CC_DIAG_DTC_LIST": {$exists: true}}).count()

它给了我 2265 个文档。

当我尝试查找包含两个字段(上述字段)的文档时,我使用以下代码:

db.getCollection("dtc").find({"payload.fields.MDI_CC_DIAG_DTC_LIST": {$exists: true}}, {"payload.asset": {$exists: true}}, {multi: true})count()

它抛出一个错误:

检索文档失败

[coches.dtc@ localhost:27017 [direct]] : An error occurred while retrieving documents!

Stacktrace: 
|_/ java.lang.Exception: [coches.dtc@ localhost:27017 [direct]] : An error occurred while retrieving documents!
|____/ Illegal argument: Invalid number of arguments to find().

我写错了什么?

这只是一个错字。您没有将另一个 属性 添加到查询中,而是将其作为第二个参数传递给 find.

试试这个:

/* ... */ true}}, {"payload.asset" /* ... */
/* ... */ true},   "payload.asset" /* ... */

您的查询有几个问题,请尝试以下一个:

db.getCollection("dtc")
  .find({
    "payload.fields.MDI_CC_DIAG_DTC_LIST": { $exists: true },
    "payload.asset": { $exists: true }
  })
  .count();

问题:

  1. .find() 将采用两个参数 .find({...},{...}) 第一个是过滤器(所有针对集合的过滤器都在这里)第二个是投影(用于从结果文档中排除或包含某些字段).在这里你传递了 3 个参数。但总的来说,当涉及到 node.js 时,第三个可能是回调函数,但它与在数据库上执行的实际查询无关。
  2. .find() 上没有名为 {multi: true} 的东西。 multi 将作为第 3 个 option/arg 传递给 .update() 操作,以便更新符合筛选条件的多个文档。