2015-10-07 37 views
2

我想用NodeJS驅動程序在MongoDB中創建一個加蓋的集合。MongoDB在NodeJS中創建集合顯示,但在CLI中不顯示?

db.createCollection(req.body.name,options,function onCreateCollection(mongoErr,mongoCollection){ 
    if(mongoErr){ 
      ... 
    }else{ 
      console.log(mongoCollection.collectionName); 
      ... 
    } 
}); 

控制檯上的集合名稱打印,但show collections不會列出它。我嘗試了一個連字符名稱this-is-a-collection

這是爲什麼?
另外,命名集合有什麼限制?

回答

2

我不知道爲什麼你的代碼不起作用。但我只是試圖用這個簡單的腳本創建一個帶有帶連字符名稱this-is-a-collection的集合,它工作。

var MongoClient = require('mongodb').MongoClient; 

var url = 'mongodb://localhost:27017/db'; 

MongoClient.connect(url, function(err, db) { 

    console.log("Connected correctly to server"); 

    db.createCollection('this-is-a-collection', { capped : true, size : 10000 } ,function onCreateCollection(err,mongoCollection){ 
     if(err){ 
      console.log(err); 
     } else { 
      console.log(mongoCollection.collectionName); 
     } 

     db.close(); 
    }); 
}); 

而在CLI:

MBP:mongo sapher$ mongo 
MongoDB shell version: 3.0.5 
connecting to: test 
.... 
> use db 
switched to db db 
> show collections 
system.indexes 
this-is-a-collection 

你可以按照這個link獲得有關MongoDB的命名限制更多信息。

對於命名約定,我personnaly使用蛇案例如remote_users。我認爲這是命名集合最優雅的方式。只要保持一致,命名並不重要。

+0

是的我也得到了成功的迴應。只是它沒有在CLI中出現。 –

+0

奇怪它爲我工作。我只是用CLI輸出編輯我的答案。 – Sapher

+0

試着讓它成爲一個封頂的集合,看看它是否有所作爲:/ –

1

事實證明,在驅動程序的舊版本1.4.x中,創建封頂集合而未指定size選項不會導致錯誤。 它甚至會返回成功響應。在較新的版本2.0.x上,它確實會導致錯誤。

對於封頂收集,需要size,而max是可選的。 docs稍微含糊不清,因爲他們沒有聲明您需要size來創建加蓋集合。

+0

我很高興你終於解決了你的問題。我認爲你是第一個遇到這個問題的人之一^^。最後,我的回答並沒有解決你的問題。 – Sapher

+0

@Sapher然後+1我:p –

+0

@Sapher它做到了。如果不適合你,我永遠不會看'size'選項。 :) –

相關問題