我用下面的文檔模式:
//User Document
{
"_id": "0610457c-b25b-4e73-b859-11987a3fe271",
"FirstName": "Some Name",
"LastName": "surname",
// it is array of ledger items
"LedgerBook": [
{
"AccountId": "aadfgdf6319d3-1a12-4575-9776-c6653sdfg5c32527",
"TransactionId": "ef98bbc4-3efb-46dc-b632-5adfgdfg1fcc378446",
....
},
...
]
,當我嘗試申請查詢db.users.find({ "LedgerBook" : { "$type" : 4 } }).limit(50);
它沒有返回值,但對於查詢db.users.find({ "LedgerBook" : { "$type" : 3 } }).limit(50);
效果很好(返回具有所有文件LedgerBook項目)。
爲什麼發生?
type = 4是Array和type = 3是Object。
我想獲取至少有一個LedgerBook項目的所有文檔。
第一個查詢行爲對我來說看起來很奇怪。如何檢查母文件中的LedgerBook類型?此外,@Andrei還希望包含LedgerBook的所有文檔的項數都大於1.但您的第二個查詢將返回包含LedgerBook的所有文檔(即使數組項計數等於0)。 – 2011-04-08 14:17:23
這就是針對數組的查詢的工作方式。可能看起來很奇怪,但大多數時候這正是你想要的。要測試LedgerBook陣列與1個或多個條目你必須使用$ where子句: – 2011-04-08 15:19:09
> db.items.find({$其中:函數(){返回this.LedgerBook的instanceof陣列&& this.LedgerBook.length > 0;}}) – 2011-04-08 15:20:44