Установив бд, теперь мы можем добавить в нее данные. Все данные хранятся в бд в формате BSON, который близок к JSON, поэтому нам надо также вводить данные в этом формате. И хотя у нас, возможно, на данный момент нет ни одной коллекции, но при добавлении в нее данных она автоматически создается.
Как ранее говорилось, имя коллекции - произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.
В то же время имя коллекции не должно начинаться с префикса system.
, так как он зарезервирован для внутренних коллекций (например,
коллекция system.users
содержит всех пользователей базы данных). И также имя не должно содержать знака доллара - $
.
Для добавления в коллекцию могут использоваться два ее метода:
insertOne(): добавляет один документ
insertMany(): добавляет несколько документов
Допустим, мы используем базу данных test. Добавим в нее один документ:
test> db.users.insertOne({"name": "Tom", "age": 28, "languages": ["english", "spanish"]})
Документ представляет набор пар ключ-значение. В данном случае добавляемый документ имеет три ключа: name, age, languages, и каждому из них сопоставляет определенное значение. Например, ключу languages в качесте значения сопоставляется массив.
Стоит отметить, что названия ключей могут использоваться в кавычках, а могут и без кавычек.
Некоторые ограничения при использовании имен ключей:
Символ $
не может быть первым символом в имени ключа
Имя ключа не может содержать символ точки .
При добавлении данных, если мы явным образом не предоставили значение для поля "_id" (то есть уникального идентификатора документа), то оно генерируется автоматически. Так, после выполнения операции добавления консоль выведет сгенерированный для добавленного документа идентификатор:
test> db.users.insertOne({"name": "Tom", "age": 28, "languages": ["english", "spanish"]}) { acknowledged: true, insertedId: ObjectId("62e27b1b06adfcddf4619fc1") } test>
В ответе сервера мы получим объект, у коготоро параметр insertedId будет содержать идентификатор.
Но в принципе мы можем сами установить этот идентификатор при добавлении данных:
test> db.users.insertOne({"_id": 123457, "name": "Tom", "age": 28, "languages": ["english", "spanish"]})
или использовать для индетификатора тип ObjectId
test> db.users.insertOne({"_id": ObjectId("62e27b1b06adfcddf4619fc6"), "name": "Tom", "age": 28, "languages": ["english", "spanish"]})
Стоит учитывать, что если для определения идентификатора применяется тип ObjectId, то он должен содержать строку 12 байт или строку из 24 символов.
В случае удачного добавления на консоль будет выведен идентификатор добавленного документа.
И чтобы убедиться, что документ в бд, мы его выводим функцией find
.
test> db.users.find()
По умолчанию он выводит все документы коллекции:
Если надо добавить ряд документов, то мы можем воспользоваться методом insertMany(), который принимает массив объектов:
db.users.insertMany([{"name": "Bob", "age": 26, "languages": ["english", "french"]}, {"name": "Alice", "age": 31, "languages":["german", "english"]}])
После добавления консоль выводит идентификаторы добавленных документов:
Есть еще один способ добавления в бд документа, который включает два этапа: определение документа (document = ( { ... } )
) и собственно его добавление:
document=({"name": "Bill", "age": 32, "languages": ["english", "french"]}) db.users.insertOne(document)
Возможно, не всем будет удобно вводить в одну строчку все пары ключей и свойств. Но интеллектуальный интерпретатор MongoDB на основе javascript позволяет также вводить и многострочные команды. Если выражение не закончено (с точки зрения языка JavaScript), и вы нажимаете Enter, то ввод следующей части выражения автоматически переносится на следующую строку:
Данные для базы данных mongodb можно определять в обычном текстовом файле, что довольно удобно, поскольку мы можем переносить или пересылать этот файл независимо от базы данных mongodb. Например, определим где-нибудь на жестком диске файл users.js со следующим содержимым:
db.users.insertMany([ {"name": "Alice", "age": 31, "languages": ["english", "french"]}, {"name": "Lene", "age": 29, "languages": ["english", "spanish"]}, {"name": "Kate", "age": 30, "languages": ["german", "russian"]} ])
То есть здесь с помощью метода insertMany добавляются три документа в коллекцию users.
Для загузки файла в текущую базу данных применяется функция load(), в которую в качестве параметра передается путь к файлу:
load("D:/users.js")
В данном случае предполагается, что файл располагается по пути "D:/users.js".