ドキュメントのリストを含むルートドキュメントがあり、保存/挿入すると、ルートドキュメントは常にMongoDBからIDを取得しますが、リスト内のドキュメントは取得しません。それらはと同じままObjectId.Empty
です。何か間違ったことをしているのか、それとも意図した動作なのかわかりません。
これが私がやろうとしていることの例です:クラスを考えると:
public class Foo
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public IList<Bar> Bars { get; set; }
}
public class Bar
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
工場あり:
public class Factory
{
public Foo CreateFoo(string name)
{
return new Foo {
Id = new ObjectId(),
Name = name,
Bars = new List<Bar>()
};
}
public Bar CreateBar(string name)
{
return new Bar {
Id = new ObjectId(),
Name = name
};
}
}
このようなサンプルを実行すると、次のようになります。
public class Program
{
static void Main(string[] args)
{
var client = new MongoClient("mongodb://localhost");
var server = client.GetServer();
var database = server.GetDatabase("Example1");
if (!database.CollectionExists("foos")) database.CreateCollection("foos");
var factory = new Factory();
var foo1 = factory.CreateFoo("first");
foo1.Bars.Add(factory.CreateBar("bar"));
var collection = database.GetCollection("foos");
collection.Insert(foo1);
var foo2 = factory.CreateFoo("second");
collection.Insert(foo2);
foo2.Bars.Add(factory.CreateBar("bar"));
collection.Save(foo2);
}
}
foo1
とfoo2
getの両方_id
がMongoDBによって生成されますが、いずれも生成されBars
ません。すべてはBars
まだ持っていObjectId.Empty
ます。これで簡単な解決策は、使用するようにファクトリを更新することですObjectId.GenerateNewId()
が、DBから生成される方が快適です。誰かがこれについて何か洞察を持っていますか?私は何か間違ったことをしていますか?これも可能ですか?入力ありがとうございます。