【问题标题】:Combining two $exists en MongoDB .find结合两个 $exists en MongoDB .find
【发布时间】:2020-07-07 05:46:41
【问题描述】:

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


    【解决方案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. .find() 上没有称为{multi: true} 的东西。 multi 将作为第三个选项/arg 传递给 .update() 操作,以更新匹配过滤条件的多个文档。

    【讨论】:

    • 感谢您的解释和详细信息。成功了
    【解决方案2】:

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

    试试这个:

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

    【讨论】:

    • 谢谢。您能否更具体并编辑您的答案以自定义我的代码?我是 Mongo 的新手,还在学习他们的语法规则......
    • 将第一行替换为第二行。您必须创建一个具有两个属性的对象,而不是两个对象具有一个属性。
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多