2017-07-25 41 views
0

我有以下對象,並希望得到的是有一個關鍵字和設備ID的所有記錄。Mongo :.如何獲得唯一的行

有可能是與同一設備ID多個對象。我想對於每一個設備ID的最後一個條目

{ 
    search:{ 
    keyword:"_" 
    }, 
    dateCreated:"", 
    device:[{ 
    deviceID:"_" 
    }], 

} 

例如

{ 
    search:{ 
    keyword:"FL" 
    }, 
    dateCreated:"01/01/2017", 
    device:[{ 
    deviceID:"1" 
    }], 

} 

{ 
    search:{ 
    keyword:"ATL" 
    }, 
    dateCreated:"01/02/2017", 
    device:[{ 
    deviceID:"1" 
    }], 

} 
{ 
    search:{ 
    keyword:"GA" 
    }, 
    dateCreated:"01/03/2017", 
    device:[{ 
    deviceID:"2" 
    }], 

} 

查詢應返回

{ 
    search:{ 
    keyword:"ATL" 
    }, 
    dateCreated:"01/02/2017", 
    device:[{ 
    deviceID:"1" 
    }], 

} 
{ 
    search:{ 
    keyword:"GA" 
    }, 
    dateCreated:"01/03/2017", 
    device:[{ 
    deviceID:"2" 
    }], 

} 
+0

'''設備:[{設備ID: 「2」}],'''爲什麼你存儲設備ID中的設備的陣列? – styopdev

回答

0

你不能做到這一點使用「dateCreated會」,首先你需要轉換「dateCreated會」欄目在(與mongo ISO日期相關的情況下)。在此之後,您可以運行以下爲在你的問題中提到實現的最後一個條目

db.abc.aggregate([ 
{ 
"$unwind": "$device" 
}, 
{$group: { 
    _id: "$device", 
    search: { 
    "$max": "$search" 
    }, 
    dateCreated: { 
    "$max": "$dateCreated" 
    } 
} 
} 
]) 

,如果你正在尋找相同的JSON格式,那麼你可以投射此查詢,

db.abc.aggregate([ 
    { 
    "$unwind": "$device" 
    }, 
    { 
    $group: { 
     _id: "$device", 
     device: { 
     "$push": "$device" 
     }, 
     search: { 
     "$max": "$search" 
     }, 
     dateCreated: { 
     "$max": "$dateCreated" 
     } 
    } 
    }, 
    { 
    $project: { 
     search: 1, 
     dateCreated: 1, 
     device: 1, 
     _id: 0 
    } 
    } 
]) 
0

使用可以使用$elemMatch

db.collection.find({device: {$elemMatch: {deviceID:'1')}}); 

$elemMatch允許您匹配相同數組元素中的多個組件。

更多here

0

IAM不明白你的意思到底是什麼,但這裏的IAM給一個解決方案就是我理解的搜索關鍵字檢查一次

db.collection.aggregate([ 
{$group:{_id:"$search.keyword",dateCreated:{$last:"$dateCreated"},device:{$last:"$device"}}},{$match:{"device.deviceID":{$ne:null}}} 
]) 

這裏IAM分組,如果你願意,你可以按這兩個搜索關鍵字和設備以及包括通過使用$最後終於配套設備不等於最後一個設備爲空日期形式