【问题标题】:Checking array type before unwind展开前检查数组类型
【发布时间】:2013-08-29 17:13:14
【问题描述】:

我有一个具有以下结构的文档

{testfields:[{"test_id":1,"test_name":"xxxx"}]},

但是,我的应用程序不知道“testfield”是数组还是普通对象,现在如果我在聚合查询中应用“$unwind”并且提交的不是数组类型“mongodb”会抛出错误,无法展开。我想知道他们的方法是我可以检查字段是否为数组类型而不是应用展开,否则视为普通对象。

【问题讨论】:

    标签: mongodb mongo-java mongojs


    【解决方案1】:

    我认为this 可以帮助您。

    在使用unwind之前,尝试使用match来过滤文档,其中testfields字段是一个数组:

    $match: { $where : "Array.isArray(this.testfields)" }
    

    然后,您可以使用unwind 而不会出错。

    【讨论】:

    • 你是对的。我很困惑,因为文档说“$match 查询语法与读取操作查询语法相同”,但我没有看到最后一个警告“您不能在 $match 查询中使用 $where 作为聚合管道的一部分”。我很抱歉。
    • 在 $type 4 docs.mongodb.org/manual/reference/operator/query/type 上查询怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2017-09-09
    • 2016-11-07
    相关资源
    最近更新 更多