Mongo 根据长度过滤字段的命令

Mongo Command to filter a field based on its length

我有一个 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 对象的记录。

如何查询?

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

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

您还需要使用 this.

来引用当前文档

您也可以使用$size which will be faster in this case, because for $where MongoDB needs to process your JavaScript expression (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})