2012-02-08 24 views
2

Mongo具有很好的操作符$ slice,這讓您只需檢索entiry的嵌入式數組的子集。從他們的官方文檔:mongo slice,默認排序是什麼,可以更改

db.posts.find({}, {comments:{$slice: 5}}) // first 5 comments 
db.posts.find({}, {comments:{$slice: -5}}) // last 5 comments 
db.posts.find({}, {comments:{$slice: [20, 10]}}) // skip 20, limit 10 
db.posts.find({}, {comments:{$slice: [-20, 10]}}) // 20 from end, limit 10 

但是我無法找到它最高審計機關如何被獲取這種方式之前,嵌入式陣列的元素是有序的。而且,更重要的是,我可以在$切片之前更改順序嗎?

回答

3

不幸的是,你目前無法做到這一點。 Mongodb $slice總是返回帶有默認嵌套數組的文檔(它是如何插入的)順序,並且不能應用任何其他順序。

一些注意事項:

  1. 嵌入式陣列始終保持它們的順序(如項目插入)
  2. 目前,如果您對嵌入式陣列值進行過濾,MongoDB的返回所有嵌套數組值,不僅匹配。在jira bug中查看更多詳情。

在下面的例子中篩選將僅在根文件被應用,當你使用$切片它返回前5個評論,而不是由過濾器「comments.name」匹配:

db.posts.find({"comments.name": "Test comment"}, {comments:{$slice: 5}}) 
+0

明白了,插入順序,就是這樣。謝謝 – 2012-02-08 09:25:02

+0

@AndreiBodnarescu:剛試過寫了一個很好的解釋。 – 2012-02-08 09:30:24

相關問題