2013-11-01 61 views
1

我試圖把對象的嵌入式陣列和排序遞減,而在5MongoDB的更新與排序和片嵌套數組,不排序倒序

如果我改變創建1這工作切片,但它是'上升的'。現在發生什麼,是新的對象,實際上並沒有插入到數組中,如果它有5個。

任何想法如何做到這一點?謝謝!

db.user.update({_id : user_id}, 
       { "$push" : { items : { "$each" : [{ 
                  action : 'one', 
                  status : 'two', 
                  value : 'three', 
                  created: new Date() 
                 } 
                 ], 
               "$sort" : {created: -1}, 
               "$slice" : -5 
              } 

          } 
       } 
       , function(err, doc) { 

       }); 

回答

0

發生了什麼事情是您要求MongoDB按降序對項目進行排序並僅保留最後5個項目;這意味着只有5個最小的物品會被保留。但是,由於您以升序插入項目(因爲Date()不斷增加),插入5個項目後,您已經有5個最小項目,因此不會插入其他項目。

正如你已經注意到,如果你改變排序順序升序,那麼你將保持5個最大的項目;由於每個新項目的Date()都比前一個項目大,所以每個新項目最初都會出現在最大的5個項目中,因此會出現在列表中。

如果您需要按降序排列的5個最大項目,則可以在$推送項目時使用升序排序順序,以便使用$ slice保持最大值5,然後當您查詢數據時,客戶端結果的順序。

0

代碼中的所有內容都按預期工作。正因爲如此,你實際上沒有看到任何結果。

你的代碼是這樣做的:

  1. 查找與_id = user_id
  2. 在文檔中的關鍵items插入一堆對象(它發生一堆= 1)
  3. 然後那種關鍵項按字段遞減順序created
  4. 並且只留下5個最小元素。

由於Date()字段出現問題。日期一直在增加。所以每個新元素都不會以這5個最小的元素結束。當你改變你created : 1,你通過增加順序進行排序,你的新日期肯定會在5個元素中結束。

對此:

任何想法如何做到這一點?謝謝!

如果你最好描述你想要的東西,我希望我能告訴你你可以改變什麼,因爲現在你的腳本正在做正確的事情。如你所說,你可以把created : 1