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

时间:2018-01-10 07:23:43

标签: javascript mongodb collections robo3t

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

我该如何查询?

1 个答案:

答案 0 :(得分:0)

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

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

您还需要使用this

来引用当前文档

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

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

编辑:

如果您希望bankDetails仅在accountData缺失db.getCollection('accdetails').find({ 'bankDetails.accountdata': { $exists: false } }).sort({$natural:-1}) 时使用$exists运营商:

$data=@"
EMPID;JOBTITLE
123;Customer Service Rep
456;Customer Service Rep
789;Customer Service Rep
213;General Clerk
234;General Clerk
"@

$yourarray=$data | ConvertFrom-Csv -Delimiter ';'

#if you considere your data into $yourarray
$Rank=0;
$yourarray | group JOBTITLE | %{$Rank++; $_.Name, $_.Group.EMPID | out-file "c:\temp\File_$Rank.txt"}