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

How can I retrieve the id of a document I added to a Cosmosdb collection?

我有一个集合,我要在其中插入不同类型的文档。我使用类型参数来区分集合中的不同数据类型。当我插入文档时,我为每个文档创建了一个 Id 字段,但 Cosmosdb 有一个内置的 id 字段。

如何在一个查询中插入一个新文档并检索所有已创建文档的 ID?

CreateDocumentAsync 方法 returns 创建的文档,因此您应该能够获取文档 ID。

 Document created = await client.CreateDocumentAsync(collectionLink, order);

我认为你只需要 .getResource() 方法来获取创建文档对象。

请参考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,如其他答案中所示。您可能有理由要将 key-assigning 委托给 DocumentDB,但坦率地说,我没有看到任何好的。

如果插入的文档没有 id 设置,DocumentDB 会为您生成一个 GUID。与 简单地自己生成一个新的 GUID 并在保存 之前将其分配给 id-field 相比,没有任何显着差异。 Self-assigning 身份可以让您稍微简化代码,还可以让您不仅在坚持之后而且在坚持之前使用身份。这可以简化您将来可能拥有或 运行 的许多场景。

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

Self-assigned non-Guid 密钥通常是更好的选择,因为它可以设计为比 GUID 更好地匹配您的数据和应用程序需求。比如除了只是唯一性之外,还可能是自然键、narrower、human-readable、ordered等