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?
答案 0 :(得分:1)
由于testfields
是Array
,$type : 4
会针对testfields
中的每个元素执行“is array”检查,而不是testfields
本身。由于您的testfields
只包含一个Object
,因此不会返回。
另一方面,如果您将以下内容插入到收藏中,
db.testarray.insert( { "testfields" : [ { "test_id" : 1, "test_name" : "xxxx" },
[ "a", "b" ] ] } );
它会被返回,因为现在testfields
的一个元素是Array
。
更多信息在docs中解释。