通过在system.indexes中添加索引在mongodb中创建新集合

时间:2015-05-09 06:54:42

标签: mongodb collections

当我尝试在mongodb中的system.indexes集合中手动插入新文档时,创建了新的集合。这里有代码

   {
    "v" : 1,
    "key" : {
        "code" : 1
    },
    "name" : "code_1",
    "ns" : "mydb.collection"
}

其中collection是我的集合名称,该名称在数据库中不存在,mydb是我的数据库名称。为什么要创建新的集合?

2 个答案:

答案 0 :(得分:2)

  

是否可以通过在system.indexes中手动添加索引来创建集合。

你为什么这样问我们?您已经尝试向system.indexes添加新索引。是否创建了新的系列?如果是,那么是的,如果不是,那么就不可能。

  

这是正确的方法吗?

您怎么看?您是否在文档中的某处阅读过为了创建新的集合,您需要跳舞并在某些系统定义的集合中手动创建索引?或者可能是was written in documentation db.createCollection(name, options)是你应该做的,或者如果你愿意,你可以只insert a document in a non existed collection而且它会创造它。

那么为什么毕竟这个人可能会认为正确的方法是使用system.indexes进行一些操作?

答案 1 :(得分:0)

作为@Salvador的补充,Dali的回答强烈反对您直接修改system.index:如果由于某种原因您真的不想/不能使用{{1只记得这是create command

的包装器

你可以发出这样的命令来创建一个新的集合:

createCollection

关于在db.runCommand( { create: "collection" } ) 中插入条目:来自doc

  

自3.0版开始不推荐使用:使用listIndexes访问此数据。

     

system.indexes集合列出了数据库中的所有索引。

通过阅读,<database>.system.indexes似乎应该被认为是只读的(自3.0以来它的直接使用甚至已被弃用)。您观察到的行为应被视为未指定。因此不可靠如有更改,恕不另行通知

如果你真的需要理解为什么它的行为方式,也许你应该看一下源代码或在MongoDB开发者邮件列表上提问。在那里你可以获得所有的见解。