2015-10-07 33 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'选项。 :) –

相关问题