1
db.foo.find();


_id    | type
-------------
10001     1
10002    'a'
10003    [1, 2, 3, 4]

如您所知,$type将匹配 mongo 查询中的类型代码,如下所示:

db.foo.find({type: {$type: 4}});

_id | 类型

----------

10003, [1, 2, 3, 4]

然后,我编写了一个名为test.js的 javascript shell 脚本

var curs = db.foo.find();
curs.forEach(showTypeCode);
function showTypeCode(cur) {
  print(cur.type + '-' + typeof(cur.type));
};

结果:

1-number
a-string
1,2,3,4-object (this is an array, it's 4 in mongo)

这是我的问题,如何在 mongo shell 中获取数组类型代码

4

1 回答 1

1

您的第一个查询:

db.foo.find({type: {$type: 4}});

由于错误,实际上不会工作。这是 MongoDB 中的一个已知错误,它在使用运算符时将数组作为对象读取$type。您可以投票并支持此 JIRA:https ://jira.mongodb.org/browse/SERVER-1475

至于用JS解决问题,这个问题可能对你有帮助:Detect if parameter passing is an array? Javascript

数组是类 Array 的对象,因此这就是您要取回对象的原因。如果您测试一个实例,Array那么它应该可以工作。

于 2012-11-12T08:57:15.563 回答