2016-10-19 44 views
0

我想要做一些非常簡單的事情,但對MongoDB來說是一個新東西!我有一個名爲Device的文檔和一個名爲Movement的子文檔。我想從last_seen(日期)訂購的設備中獲取最後兩個移動子文檔。這是我與我正在沿着錯誤有:使用貓鼬對子文檔進行排序(MongoDB)

Device.findOne({device_id: "1234"}, {movements: { $sort: {last_seen: -1}, $slice: 2 }}, function(err, device){ 
    ... 
}); 

的錯誤:

MongoError: >1 field in obj: { $sort: { last_seen: -1 }, $slice: 2 }

+0

請張貼有效樣本文件。 – Saleem

回答

0

您可以使用aggregate

Device.aggregate(
    { $match: { device_id: "1234"}}, // query documents (can return more than one element) 
    { $unwind: '$movements'}, //deconstruct the documents 
    { $sort: { '$movements.last_seen': -1}}, 
    { $limit: 2 }, 
    { $group: { _id: '$device_id', movements: { $push: '$movements }}} //reconstruct the documents 
function(err, devices){ 
    //returns an array, probably with one elements depending on `$match` query 
}); 
+0

下面是我從中得到的結果:MongoError:$ sort鍵規範必須是一個對象 – gregwinn

+0

另外我注意到,在重建中,只有ID和運動正在進入。我想顯示所有設備數據,我是否必須指定我想展示的每件東西,還是有「全部」選擇​​。 – gregwinn

+0

@gregwinn修復$ sort。關於重建,你必須指定你想要的每個領域。在你的情況下,除了因運動放鬆而產生的「移動」外,所有字段都是相同的,你可以將它們包含在'_id:{device_id:'$ device_id',field1:'$ field1'等'_id'中。 。},動作:...}'。之後,您可以使用投影刪除_id嵌套,如果你想。 –