1
I have a collection having following data:

{"_id" : ObjectId("5220222f8188d30ce85d61cc"),

“testfields”:[{“test_id”:1,“test_name”:“xxxx”}]}

when I query :
db.testarray.find({ "testfields" : { "$type" : 4 } })

it returns no data,but same returns data when I do:
db.testarray.find({ "$where" : "Array.isArray(this.testfields)" })

It returns data, do the type:4 identifies some other kind of list?
4

1 回答 1

1

因为testfieldsis an Array$type : 4将对每个元素执行“is array”检查,testfields而不是testfields它本身。由于您testfields只包含一个Object,它不会被退回。

另一方面,如果您将以下内容插入您的收藏,

db.testarray.insert( { "testfields" : [ { "test_id" : 1, "test_name" : "xxxx" }, 
                                        [ "a", "b" ] ] } );

它会被返回,因为现在 的元素之一testfieldsArray.

更多信息在文档中解释这一点。

于 2013-08-30T05:01:24.523 回答