Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 制作脚本以从MongoShell创建MongoDB集合?_Javascript_Mongodb - Fatal编程技术网

Javascript 制作脚本以从MongoShell创建MongoDB集合?

Javascript 制作脚本以从MongoShell创建MongoDB集合?,javascript,mongodb,Javascript,Mongodb,你能帮我写MongoShell脚本来创建新的集合和索引吗。下面是我编写的部分代码,我需要对其进行重构 db.createCollection("Dog", { autoIndexId : true}); db.createCollection("Cat", { autoIndexId : true}); db.createCollection("Mouse", { autoIndexId : true}); db.createCollection("Name", { autoIndexId

你能帮我写MongoShell脚本来创建新的集合和索引吗。下面是我编写的部分代码,我需要对其进行重构

db.createCollection("Dog", { autoIndexId : true});

db.createCollection("Cat", { autoIndexId : true});

db.createCollection("Mouse", { autoIndexId : true});

db.createCollection("Name", { autoIndexId : true});

在上面的代码中,我可以编写一条语句来创建多个集合吗?还可以一次性向一个集合添加多个索引

Mongo Shell脚本只是JavaScript脚本。您可以使用常规JavaScript控制结构(如循环)和字符串插值/字符串操纵操作来生成集合名称

我猜会的

[“狗”、“猫”、“鼠标”、“名称”]。forEach(函数(collName){
createCollection(collName,{autoIndexId:true});
});
来自Mongo shell:


注意:

{autoIndexId:true}
选项自MongoDB版本3.2以来已被弃用;它是关于在
\u id
字段上创建索引的。
\u id
的唯一索引现在是强制性的,并且是自动创建的。因此,您不必指定该选项(并且不能指定
false
选项;它将给出一个错误)

还可以创建详细的脚本,以便在创建集合后添加索引。请参阅。

我们有一个编写shell脚本的方法。从文件执行的脚本使用稍微不同的语法来创建连接和获取数据库,例如:

打开连接:

new Mongo()
new Mongo(<host>)
new Mongo(<host:port>)
使用以下命令创建一个名为“my_scripts.js”的文件。此JavaScript定义了用于创建两个集合(
dogs
cats
)的数据和命令、它们的数据(作为JSON的文档)和索引(索引在集合的
name
字段上创建)

my_scripts.js:

let dogDocs = [
  {
    name: "pooch",
    breed: "poodle",
    weight: "6 lbs"
  },
  {
    name: "mutt",
    breed: "bulldog",
    weight: "10 lbs"
  }
];

let catDocs = [
  {
    name: "minni", 
    breed: "persian",
    color: "white"
  },
  {
    name: "tinkle",
    breed: "bombay",
    color: "black"
  }
];

let dogIndex = { name : 1 };
let catIndex = { name : 1 };

let collInfoObjs = [ 
  { coll: "dogs", data: dogDocs, index: dogIndex }, 
  { coll: "cats", data: catDocs, index: catIndex } 
];

for (obj of collInfoObjs) {
    db[obj.coll].insertMany(obj.data);
    db[obj.coll].createIndex(obj.index);
}

运行脚本文件:

let dogDocs = [
  {
    name: "pooch",
    breed: "poodle",
    weight: "6 lbs"
  },
  {
    name: "mutt",
    breed: "bulldog",
    weight: "10 lbs"
  }
];

let catDocs = [
  {
    name: "minni", 
    breed: "persian",
    color: "white"
  },
  {
    name: "tinkle",
    breed: "bombay",
    color: "black"
  }
];

let dogIndex = { name : 1 };
let catIndex = { name : 1 };

let collInfoObjs = [ 
  { coll: "dogs", data: dogDocs, index: dogIndex }, 
  { coll: "cats", data: catDocs, index: catIndex } 
];

for (obj of collInfoObjs) {
    db[obj.coll].insertMany(obj.data);
    db[obj.coll].createIndex(obj.index);
}
在mongo shell中,以如下方式运行脚本(您可以使用
load
命令指定文件路径):

脚本运行后,可以单独使用以下命令来验证集合、它们的文档和索引:

db.dogs.find();
db.cats.find();
db.dogs.getIndexes();
db.cats.getIndexes();

请注意,文档将具有唯一的
\u id
字段(类型为
ObjectId
)如果您没有在输入的JSON数据中提供
\u id
,则创建此文件。

@uttamrao我的帖子不是完全回答了您的问题吗?我在寻找一些东西else@uttamrao那么我想你必须考虑修改你的问题further@uttamrao啊,对了,对不起,没有注意到变化。我调整了答案。您可以创建JS脚本,使用
insert
方法将文档添加到集合中。或者,甚至可以使用OS命令行工具
mongoimport
将数据从JSON或CSV文件导入到集合中。有关详细信息,请在中搜索您最喜欢的主题。请参阅本文中的代码,您可以将其包含在JS脚本中:。是的,每个集合一个。您可以将所有语句放在JavaScript文件中。这些语句将一个接一个地执行。请参阅我在答案中提供的链接:从MongoShell编写脚本。
mongo > load("my_script.js");
db.dogs.find();
db.cats.find();
db.dogs.getIndexes();
db.cats.getIndexes();