2015-11-19 97 views
1

我想遍歷包含〜31k文檔的我的集合。 每次我想查詢使用skip返回100個文檔時,從第一個文檔開始並返回下一個100,依此類推。 我從請求得到skip指數:貓鼬跳過不跳過文檔

find: function (req, res) { 
      var name = "node" 
      var limit = 100; 
      console.log(req); 
      var query = {}; 
      query = req.query; 
      var url_parts = url.parse(req.url, true); 
      var query = url_parts.query; 
      console.log("skip typeof : " + typeof(Number(query.skip))); 
      var Collection = getCollection(name); 
Collection.find(query).skip(Number(query.skip)).limit(limit).toArray(function(err, docs) { 
       console.log(docs); 
       res.send(docs); 
      }); 

      }); 

控制檯日誌表明query.skip:1,101,201 ...所以這個問題必須在我的查詢:

Collection.find(query).skip(Number(query.skip)).limit(limit).toArray(function(err, docs) { 
       console.log(docs); 
       res.send(docs); 
      }); 

但該查詢所返回對於每個請求的同一文檔:

req 1 [{nid : 4033},{nid:4501}] 
req 2 [{nid : 4033},{nid:4501}] 

跳過值是數:

skip typeof : number 

感謝您的幫助。

+0

您是否在mongo控制檯上嘗試過相同的查詢? –

+0

我會發布結果。 –

+0

在mongo控制檯中正常工作。 –

回答

4

我的猜測是,query.skip是一個字符串,和MongoDB希望它是一個數字:

Collection.find({}).skip(Number(query.skip)).limit(...) 

編輯:顯然,你傳遞給queryfind()爲好,這是行不通的如果skip也是一個屬性(因爲MongoDB會認爲這是一個查詢字段)。

試試這個:

var skip = Number(query.skip); 
delete query.skip; 
Collection.find(query).skip(skip).limit(...); 
+0

不,當我控制檯的日誌類型的號碼。 –

+0

有沒有其他想法? –

+0

@ItsikMauyhas我不明白它是如何成爲一個數字的,因爲你使用'url.parse()'來獲取它。 AFAIK,該函數將始終返回字符串。所以也許你沒有發佈你的所有代碼?爲了快速檢查,只需使用傳遞給'.skip()'的硬編碼值來查看是否有效。 – robertklep

0

等等之類的評論說,我用:

var skipInNumber = Number(query.skip); 

和查詢:

Collection.find(query).skip(skipInNumber).limit(limit).toArray(function(err, docs) { 
       console.log(docs); 
       res.send(docs); 
      }); 

學分轉到評論花花公子。