彙總文件聚集可以說我有三個學生...
愛麗絲,她總是在星期五。
{
"name" : "Alice",
"goes" : {
"mondays" : {
"fr" : 900,
"to" : 1400
},
"fridays" : {
"fr" : 700,
"to" : 1600
},
}
}
和Bob,這裏應該有第一一月
{
"_id" : ObjectId("5284a7085d60338b40b8f17d"),
"name" : "Bob",
"goes" : {
"mondays" : {
"fr" : 800,
"to" : 1200
},
"special" : [
{
"date" : "2010-01-01",
"fr" : 1000,
"to" : 1500
}
]
}
}
和Clair的誰也不會在週一或10.00
{
"_id" : ObjectId("5284c2785d60338b40b8f17f"),
"name" : "Clair",
"goes" : {
"wednesdays" : {
"fr" : 1100,
"to" : 1500
},
"special" : [
{
"date" : "2010-01-01",
"fr" : 1600,
"to" : 1900
},
{
"date" : "2010-01-02",
"fr" : 1000,
"to" : 1300
}
]
}
}
被媒體查詢我想找到所有那些應該在2010年1月1日上午7點10分參加的學生
所以我這樣做與聚合框架。
db.students.aggregate(
[
{
$unwind: "$goes.special"
},
{
$match: {
$or : [
{
'goes.fridays.fr': 700,
},
{
'goes.special.date' : '2010-01-01',
'goes.special.fr': 1000
}
]
}
}
]
)
但是愛麗絲沒有出現。它清楚地說明了爲什麼在mongodb文檔中,最底層的是http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/。
「如果你指定一個目標字段$放鬆持有空數組 ([])輸入文檔中,管道忽略輸入文件, 和意志產生任何結果的文件。」
我可以通過添加一個空值的數組來解決這個問題,但這並不像一個很好的解決方案。
有沒有一種方法可以讓我放鬆而不忽略在$ unwind'ed數組中沒有數據的文檔?
是否需要'$ unwind'ed結果,除了你在問題中提到的內容? –