ネストされたドキュメントをC#を使用してMongoDBに挿入しようとしています。カテゴリと呼ばれるコレクションがあります。そのコレクションには、配列が2つ、カテゴリが1つ、標準が1つのドキュメントが存在しなければなりません。これらの配列の中には、上記の同じ名前の配列も含まれる独自のIDを持つ新しい文書が存在する必要があります。以下は私がこれまで行ってきたことですが、進める方法がわかりません。私がしたいコードを見ているならば、 "namingConventions"ドキュメントをcategoriesドキュメントのcategories配列の下にネストして追加しますが、namingConventionsも一意のIDを持たなければなりません。C#でMongoDBにネストされたドキュメントを挿入する
この時点で私は可能な限り最良の方法を実行したとは確信していませんので、私はこの全体のすべてのアドバイスをすべて公開しています。私は何をやっていることはコーディング標準のサイトを構築して
:
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" : []
}
は今、私はこれを実現するためにコードを書かれているが、問題はそれを参照していないが「1」である私は、オブジェクト内のカテゴリ配列にオブジェクト「0」を追加すると、そのように思わ代わりにそれをコピーします。これは、変更が行われた場合、元のオブジェクト "0"に行われるため、カテゴリ配列で作成されたコピーにプッシュされないため、少なくとも私にとって起こっていることであるからです。私はこれが私が探しているものをクリアすることを願っています。
どのドライバを使用していますか?まるでOfficial 10genサポートドライバーを使用していないかのように見えます。何らかの理由? –
'0'ドキュメントのIDは意図的に '1'ドキュメントの最初のカテゴリIDと同じですか? –
私は今参照してください。これは自動的には起こりません。コピーは、MongoDBでこの動作を実現する唯一の方法です。率直に言って、この動作はデータベース内で自動的には起こりません。このようにする必要がある理由はありますか?このスキーマは本当に私にとって意味をなさない。 –