2012-11-12 17 views
1
db.foo.find(); 


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

如你所知,在$型将匹配蒙戈查询类型代码,就像这样:得到JS脚本MongoDB的数据类型

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

_id |键入

----------

10003,[1,2,3,4]

然后,我写称为一个javascript外壳脚本test.js

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) 

这里是我的问题,我怎样才能在蒙戈数组类型代码外壳

+0

这是一个已知的bug,MongoDB实际上将一个数组作为一个对象读取。 – Sammaye

+0

这里是它的JIRA:https://jira.mongodb.org/browse/SERVER-1475 – Sammaye

+0

@ Sammaye,我不应该使用这个演示,在javascript []和{}都是对象类型。我想要得到mongo数据类型4.是否有任何方法可以显示这种类型的代码?:) – sashimi

回答

1

你的第一个查询:

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

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

作为解决与JS的问题,这个问题可能会帮上你:Detect if parameter passed is an array? Javascript

数组是Array类的对象,所以这就是为什么你会得到回报。如果你测试一个Array的实例,那么它应该可以工作。

+0

thx〜monogodb非常活泼。 – sashimi