Я пытаюсь вставить вложенные документы в MongoDB с помощью C#. У меня есть коллекция под названием категории. В этой коллекции должны быть документы с 2 массивами, одна из названных категорий и один именованный стандарт. Внутри этих массивов должны существовать новые документы со своими собственными идентификаторами, которые также содержат массивы с теми же именами, что указаны выше. Ниже приводится то, что у меня есть до сих пор, но я не уверен, как действовать дальше. Если вы посмотрите на код, что я хочу сделать, это добавить документ «namingConventions», вложенный в массив категорий в документе категорий, однако имена именования должны иметь уникальный идентификатор.Вложенная вставка документа в MongoDB с C#
На этом этапе я не уверен, что я сделал это как можно лучше, поэтому я открыт для всех и всяких советов по всему этому.
namespace ClassLibrary1
{
using MongoDB.Bson;
using MongoDB.Driver;
public class Class1
{
public void test()
{
string connectionString = "mongodb://localhost";
MongoServer server = MongoServer.Create(connectionString);
MongoDatabase standards = server.GetDatabase("Standards");
MongoCollection<BsonDocument> categories = standards.GetCollection<BsonDocument>("catagories");
BsonDocument[] batch = {
new BsonDocument { { "categories", new BsonArray {} },
{ "standards", new BsonArray { } } },
new BsonDocument { { "catagories", new BsonArray { } },
{ "standards", new BsonArray { } } },
};
categories.InsertBatch(batch);
((BsonArray)batch[0]["categories"]).Add(batch[1]);
categories.Save(batch[0]);
}
}
}
Для ясности это то, что мне нужно:
Что я делаю это создание сайта стандартов кодирования. Компания хочет, чтобы все стандарты хранились в MongoDB в дереве. Все должно иметь уникальный идентификатор, чтобы, помимо того, что он был запрошен как дерево, он также может быть запрошен сам по себе. Примером может быть:
/* 0 */
{
"_id" : ObjectId("4fb39795b74861183c713807"),
"catagories" : [],
"standards" : []
}
/* 1 */
{
"_id" : ObjectId("4fb39795b74861183c713806"),
"categories" : [{
"_id" : ObjectId("4fb39795b74861183c713807"),
"catagories" : [],
"standards" : []
}],
"standards" : []
}
Теперь я написал код, чтобы это произошло, но этот вопрос, кажется, что, когда я добавить объект «0» в категории массива в объекте «1» он не делает ссылку а вместо этого копировать его. Это не произойдет, потому что, если будут внесены изменения, они будут сделаны в исходный объект «0», поэтому они не будут нажаты на копию, создаваемую в массиве категорий, по крайней мере, это то, что происходит со мной. Надеюсь, это прояснит то, что я ищу.
Какой драйвер вы используете? Кажется, что вы не используете официальный драйвер поддержки 10gen. Любая причина? –
Является ли документ документа «0» намеренно таким же, как идентификатор первой категории документов «1»? –
Я вижу сейчас. Это никогда не произойдет автоматически. Копия - единственный способ добиться такого поведения в MongoDB. Честно говоря, такое поведение никогда не будет происходить автоматически и в базе данных. Есть ли причина, по которой вам это нужно, чтобы быть таким? Эта схема для меня не имеет смысла. –