【问题标题】:Distinguish array from single value in a document将数组与文档中的单个值区分开来
【发布时间】:2014-10-02 18:23:03
【问题描述】:

我在 mongodb 集合中有两种类型的文档:

  • 一个关键会话具有简单价值的地方:

    {"会话": NumberLong("10000000000001")}

  • 其中关键会话具有一组值。

    {“会话”:[NumberLong(“10000000000001”)]}

有没有办法从第二类中检索所有文档,即。只有值是数组而不是简单值的文档?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用这种查询:

    db.collectionName.find( { $where : "Array.isArray(this.sessions)" } );
    

    但您最好将所有记录转换为一种类型以保持一致。

    【讨论】:

    • @AlexeiKosov 我同意事情应该是一致的。此状态是错误的结果。
    【解决方案2】:

    这段代码可以这么简单:

    db.c.find({sessions:{$gte:[]}});
    

    说明:

    • 因为你只想检索sessions数据类型为数组的文档,并且通过$gte的特性(如果两个操作数之间的数据类型不同,则返回false; Double, Integer32, Integer64 被认为是相同的数据类型。),给一个空数组作为相反的操作数将有助于检索所需的所有结果。
    • 另外,$gt, $lt, $lte 用于标准查询(注意:聚合管道表达式中同名操作符的不同行为)具有相同的功能。我在 MongoDB V2.4.8、V2.6.4 上通过实践证明了这一点。

    【讨论】:

    • 您应该添加一些详细信息来解释为什么这是问题的解决方案。
    • @Exa,你是对的。我已在结果中附加了解释。
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2022-01-05
    • 2012-10-12
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多