将两个$ exists合并到MongoDB .find

问题描述 投票:1回答:2

我想使用$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().

我写错了什么?

arrays mongodb exists
2个回答
1
投票

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

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

问题:

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

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

尝试一下:

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

© www.soinside.com 2019 - 2024. All rights reserved.