如何检索添加到 Cosmosdb 集合的文档的 ID?



我有一个集合,我在其中插入不同类型的文档。我使用 type 参数来区分集合中的不同数据类型。插入文档时,我为每个文档创建了一个 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);

希望对您有所帮助。

当然,您始终可以从您喜欢的 API 中的创建方法响应中获取id,如其他答案所示。您可能有将密钥分配委托给 DocumentDB 的原因,但坦率地说,我没有看到任何好的理由。

如果插入的文档没有设置id则 DocumentDB 将为您生成 GUID。与在保存之前简单地自己生成新的 GUID 并将其分配到 id 字段中相比,不会有任何显着区别。自分配标识可以让你稍微简化代码,还可以让你不仅在持久之后而且在之前使用该标识。这可以简化您可能遇到或将来遇到的许多场景。

另请注意,您不必将 GUID 用作id,并且可以使用已有的任何唯一值。既然你提到你有和Id字段(根据名称,我假设它是一个主键),那么你应该考虑重用它,而不是引入另一组键。

自分配的非 Guid 密钥通常是更好的选择,因为它可以设计为比 GUID 更好地匹配数据和应用程序需求。例如,除了唯一之外,它还可能是自然键,更窄,人类可读,有序等。

最新更新