所以我有两个功能如下。 InsertOne()函数工作正常,并使用新创建的_id更新BsonDocument。但是,InsertMany()函数不返回对象ID。我调试了代码,没有任何单个文档使用_id字段进行更新。
InsertMany()函数确实将文档插入到数据库中,我可以看到它们都有来自Mongo shell的对象ID。
我的代码中的模型没有Id字段。它们正在使用MyModel.ToBsonDocument()等代码进行转换。
我是否遗漏了一些东西来取回批量插入产生的ID?
public string InsertOne(BsonDocument document)
{
MongoCollection.InsertOne(document);
return document["_id"].ToString();
}
public string[] InsertMany(IEnumerable<BsonDocument> documents)
{
MongoCollection.InsertMany(documents);
return documents.Select(item => Convert.ToString(item["_id"])).ToArray();
}
编辑 - 不确定这是否是一个错误,但我刚才意识到如果我使用列表而不是IEnumerable,则InsertMany()按预期工作。
答案 0 :(得分:1)
它与如何在LINQ中创建find . -name '*.txt' -execdir awk '{print>$1}' {} +
的集合有关。 IEnumerable
通过对其进行枚举并填充MongoCollection.InsertMany
来实现集合下的集合。然而,它是一个新的集合,它不是你最初传入的_id
,这就是为什么它没有id。如果您传递IEnumerable
,则该集合已经实现,因此它只会填充其中的字段。