Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中为子对象自动创建ObjectID_Mongodb_Json.net - Fatal编程技术网

如何在MongoDB中为子对象自动创建ObjectID

如何在MongoDB中为子对象自动创建ObjectID,mongodb,json.net,Mongodb,Json.net,我有一个Service1,它创建了一个JObject。然后我有Service2,它将这个JObject插入mongodb 服务1 var doc = GetDocument(); var jDoc = new JObject( new JProperty("_id", doc.DocumentID), new JProperty("url", doc.DocumentLink),

我有一个Service1,它创建了一个
JObject
。然后我有Service2,它将这个JObject插入mongodb

服务1

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"))))));
然后我将这个jObject传递给Service2,Service2将它插入mongoDB

服务2

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

没有使用文档对象作为参数,我没有找到解决您问题的好方法

1) 如果在文档对象的属性上使用属性,则可以自动生成
\u id
类型的
ObjectId
值。通过使用公共接口或具有属性的包装器类,可以避免引用Service1中的MongoDB库。如果您对此不感兴趣,可以尝试使用
SetOnInsert
;但是,这同样需要将有关
JObject
结构的信息传递给
Create
方法

2) 如果仍要使用
JObject
,可以使用find/replace(可能使用正则表达式),也可以为
\u id
属性创建自定义数据类型并创建自定义序列化程序。以下各项确实按预期工作:

string json = "{ \"_id\" : ObjectId(\"559b3cc8bf13a6740d7d50b0\") }";
BsonDocument bDoc = BsonDocument.Parse(json);

可能是因为它与服务1中已有的_id字段冲突。您可以尝试重命名,然后重新创建。您应该尝试使用类而不是JObject的类来建模文档
string json = "{ \"_id\" : ObjectId(\"559b3cc8bf13a6740d7d50b0\") }";
BsonDocument bDoc = BsonDocument.Parse(json);