我正在尝试在 Docker 中播种我的 MongoDB。
我的 docker-compose.yml 文件非常简单,这是我的
虽然音量:

...
volumes:
      - ./mongo/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
      - ./mongo/mongod.conf:/etc/mongod.conf:ro
      - ./mongo/mongo-volume:/data/db
...
我将 init-mongo.js 映射为一个卷,这是它的内容:
db.createUser({
  user: 'root',
  pwd: 'toor',
  roles: [
    {
      role: 'readWrite',
      db: 'testDB',
    },
  ],
});
db.createCollection('users', { capped: false });
db.createCollection('test', { capped: false });

db.test.insert([
  { "item": 1 },
  { "item": 2 },
  { "item": 3 },
  { "item": 4 },
  { "item": 5 }
]);
用户 root 和数据库 testDB 以及集合 userstest 都没有问题地创建。
问题是 db.test.insert([]) 似乎都被遗漏了,并且没有文档被插入到 test 集合中。
任何想法为什么会这样?
我绝对很乐意让这个工作,并且非常感谢这方面的任何帮助。
谢谢,
-凯文

最佳答案

将您的 init-mongo.js 文件更改为此以首先选择新数据库,然后创建集合,最后将数据播种到其中:

db.createUser({
    user: 'root',
    pwd: 'toor',
    roles: [
        {
            role: 'readWrite',
            db: 'testDB',
        },
    ],
});

db = new Mongo().getDB("testDB");

db.createCollection('users', { capped: false });
db.createCollection('test', { capped: false });

db.test.insert([
    { "item": 1 },
    { "item": 2 },
    { "item": 3 },
    { "item": 4 },
    { "item": 5 }
]);
然后登录mongo shell(使用mongo -u [admin_username] -p)查看testDB集合中的数据:
use testDB;
db.getCollection('test').find()
这将显示:
{ "_id" : ObjectId("5f947906cc845282e5711728"), "item" : 1 }
{ "_id" : ObjectId("5f947906cc845282e5711729"), "item" : 2 }
{ "_id" : ObjectId("5f947906cc845282e571172a"), "item" : 3 }
{ "_id" : ObjectId("5f947906cc845282e571172b"), "item" : 4 }
{ "_id" : ObjectId("5f947906cc845282e571172c"), "item" : 5 }

关于MongoDB Docker 初始化脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64507628/

10-16 18:32