C#を使用してネストされたドキュメントをMongoDBに挿入しようとしています。カテゴリというコレクションがあります。そのコレクションには、2つの配列、1つは名前付きカテゴリ、もう1つは名前付き標準のドキュメントが存在する必要があります。これらの配列内には、上記の同じ名前の配列も含む独自のIDを持つ新しいドキュメントが存在する必要があります。以下は私がこれまでに持っているものですが、どのように進めるかがわかりません。コードを見ると、私がやりたいのは、categoriesドキュメントのcategories配列の下にネストされた「namingConventions」ドキュメントを追加することですが、namingConventionsには一意のIDも必要です。
この時点で、私はこれを可能な限り最善の方法で行ったかどうかわからないので、このすべてについてのあらゆるアドバイスを受け入れます。
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に保存されているすべての標準をツリーに格納することを望んでいます。ツリーとしてクエリされるだけでなく、それ自体でもクエリできるように、すべてに一意のIDが必要です。例は次のとおりです。
/* 0 */
{
"_id" : ObjectId("4fb39795b74861183c713807"),
"catagories" : [],
"standards" : []
}
/* 1 */
{
"_id" : ObjectId("4fb39795b74861183c713806"),
"categories" : [{
"_id" : ObjectId("4fb39795b74861183c713807"),
"catagories" : [],
"standards" : []
}],
"standards" : []
}
これを実現するためのコードを記述しましたが、問題は、オブジェクト「0」をオブジェクト「1」のcategories配列に追加すると、参照を作成せず、代わりにコピーすることであるようです。変更が加えられた場合、元のオブジェクト「0」に変更が加えられ、categories配列で行われているコピーにプッシュされないため、これは原因ではありません。少なくとも、それが私に起こっていることです。これで私が探しているものが明らかになることを願っています。