我有一个集合,我在其中插入不同类型的文档。我使用类型参数来区分集合中的不同数据类型。在插入文档时,我为每个文档创建了一个 Id 字段,但 Cosmosdb 有一个内置的 id 字段。
如何在一个查询中插入新文档并检索已创建文档的 id?
我有一个集合,我在其中插入不同类型的文档。我使用类型参数来区分集合中的不同数据类型。在插入文档时,我为每个文档创建了一个 Id 字段,但 Cosmosdb 有一个内置的 id 字段。
如何在一个查询中插入新文档并检索已创建文档的 id?
该CreateDocumentAsync
方法返回创建的文档,因此您应该能够获取文档 ID。
Document created = await client.CreateDocumentAsync(collectionLink, order);
我认为您只需要.getResource()
获取创建文档obj的方法。
请参考java代码:
DocumentClient documentClient = new DocumentClient(END_POINT,
MASTER_KEY, ConnectionPolicy.GetDefault(),
ConsistencyLevel.Session);
Document document = new Document();
document.set("name","aaa");
document = documentClient.createDocument("dbs/db/colls/coll",document,null,false).getResource();
System.out.println(document.toString());
//then do your business logic with the document.....
C#代码:
Parent p = new Parent
{
FamilyName = "Andersen.1",
FirstName = "Andersen",
};
Document doc = client.CreateDocumentAsync("dbs/db/colls/coll",p,null).Result.Resource;
Console.WriteLine(doc);
希望它可以帮助你。
当然,您始终可以id
在您喜欢的 API 中获取 from creation 方法响应,如其他答案中所示。您可能有理由将密钥分配委托给 DocumentDB,但坦率地说,我没有看到任何好的理由。
如果插入的文档没有id
设置,DocumentDB 将为您生成一个 GUID。与简单地自己生成一个新的 GUID 并在 save 之前将其分配给 id-field相比,不会有任何显着的区别。自我分配身份可以让您稍微简化代码,并且不仅可以在持久化之后使用身份,还可以在之前使用身份。这可以简化您将来可能遇到或遇到的许多场景。
另外,请注意,您不必像 as 一样使用 GUID,id
也可以使用您已有的任何唯一值。既然您提到您拥有和Id
字段(按名称,我假设它是主键),那么您应该考虑重用它而不是引入另一组键。
自分配非 GUID 键通常是更好的选择,因为它可以设计为比 GUID 更好地匹配您的数据和应用程序需求。例如,除了唯一性之外,它还可能是自然键、更窄、人类可读、有序等。