2016-12-28 16 views
0

私はJObjectを作成するService1を持っています。それから私はService2をmongo DBにそのJObjectを挿入します。MongoDBの子のためのObjectIDを自動的に作成する方法

Service1のは

var doc = GetDocument(); 
var jDoc = new JObject(
        new JProperty("_id", doc.DocumentID), 
        new JProperty("url", doc.DocumentLink),     
        new JProperty("cost", null), 
        new JProperty("context", new JObject(
         new JProperty("endTime", null), 
         new JProperty("startTime", doc.DocumentCreated))),     
        new JProperty("tasks", new JObject(
         new JProperty("phase", "completed"),       
         new JProperty("initialTask", new JObject(        
           new JProperty("name",doc.DocumentName), 
           new JProperty("input", "someinput")))))); 

そして

 public async Task Create(JObject jDoc) 
    { 
      var collection = _mongoDatabase.GetCollection<BsonDocument>("units"); 
      var bDoc = BsonDocument.Parse(jDoc.ToString()); 
      await collection.InsertOneAsync(bDoc); 
     } 
    } 

Service1のルート文書要素の_id作成MongoDBの

サービス2に挿入サービス2に、このjオブジェクトを渡すイム。私はService2がmongoDbにドキュメントを挿入するときに、contexttasksinitialTaskのような子プロパティのために_idを自動的に作成しますが、子供向けには_idを作成しません。

質問
1>どのように私はautomatially、すべての子供のための_idを作成するのですか?
を自動的に作成できない場合、_idをService1として作成する場合は、MongoDB.Deriverを参照せずにService1でObjectIDを作成できます。 Service2のみがMongoDB.Driverを参照していることに注意してください。 Service1にはMongoDB.Driverへの参照がありません。 私は、パラメータとしてドキュメントオブジェクトを使用せずに、次の形式

"_id" : ObjectId("559b3cc8bf13a6740d7d50b0") 
+0

であってもよいです。 – Veeram

+0

JObjectのクラスではなく、 –

答えて

0

の子どもたちの_idをしたい、私はあなたの問題に良い解決策を見つけることができませんでした。

1)ObjectIdの値を自動的に生成することは、ドキュメントオブジェクトのプロパティで属性を使用すると可能です。 Service1でMongoDBライブラリを参照することを避けるには、属性を持つ共通インタフェースまたはラッパークラスを使用します。これがあなたにアピールしない場合は、SetOnInsertを試してみてください。ただし、JObjectの構造に関する情報をCreateメソッドに渡す必要があります。

2)まだJObjectを使用する場合は、find/replace(おそらく正規表現を使用)を使用するか、_idプロパティのカスタムデータ型を作成してカスタムシリアライザを作成します。予想通り、次の作業を行います。それはあなたがすでにサービス1にあなたが名前を変更しようとし、再度作成することができてい_idフィールドと衝突ているため

string json = "{ \"_id\" : ObjectId(\"559b3cc8bf13a6740d7d50b0\") }"; 
BsonDocument bDoc = BsonDocument.Parse(json); 
関連する問題