【问题标题】:Mongo Command to filter a field based on its lengthMongo 命令根据字段长度过滤字段
【发布时间】:2018-06-19 07:36:21
【问题描述】:

我有一个 mongo 集合,我试图过滤所有长度为 =1 的特定字段的记录

我正在尝试使用下面的命令,它给出了以下错误,有人可以在这里帮忙

db.getCollection('accdetails').find({$where:"bankDetails.length = 1"}).sort({$natural:-1})

下面是错误

Error: error: {
"ok" : 0,
"errmsg" : "ReferenceError: bankDetails is not defined :\n_funcs5@:1:24\n",
"code" : 139
}

但我的对象中有 bankDetails 字段

** 编辑更准确* 以下是我的记录

{
"id" : "123",
"bankDetails" : {
    "bankdata" : {
        "banknum" : {}

    },
    "accountdata" : {
        "accnum" : {}

    }

}
}

对于某些记录 accountdata 丢失,所以我想查看记录中没有 accountdata 对象的记录。

如何查询?

【问题讨论】:

    标签: javascript mongodb collections robo3t


    【解决方案1】:

    $where 是一个常规的 JavaScript 语句,所以你应该使用双等号来比较值:

    db.getCollection('accdetails').find({$where:"this.bankDetails.length == 1"}).sort({$natural:-1})
    

    您还需要使用this 引用当前文档。

    您也可以使用$size,在这种情况下会更快,因为对于 $where MongoDB 需要处理您的 JavaScript 表达式 (docs),因此应尽可能避免使用它:

    db.getCollection('accdetails').find({ bankDetails: { $size: 1 } }).sort({$natural:-1})
    

    编辑:

    如果您只想在缺少accountData 的地方获得bankDetails,您应该使用$exists 运算符:

    db.getCollection('accdetails').find({ 'bankDetails.accountdata': { $exists: false } }).sort({$natural:-1})
    

    【讨论】:

    • Thanks.mickl 它在我的情况下不起作用..抱歉,也许我没有正确格式化问题。我已经添加了我的示例记录并详细询问了问题。你能看看
    • @hammy,我修改了答案,试试 $exists 运算符
    • 谢谢。它起作用了。最后一个帮助,如果我需要查找 id 存在且 bankDetails.accountdata 不存在的记录怎么办?
    • .find({ 'bankDetails.accountdata': { $exists: false }, 'id': { $exists: true } })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多