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

时间:2018-03-19 06:56:36

标签: entity primary-key azure-cosmosdb primary-key-design

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

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

我认为你只需要.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);

希望它对你有所帮助。

答案 2 :(得分:0)

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

如果插入的文档没有设置id,则DocumentDB会为您生成GUID。与自己简单地生成新GUID并在保存之前将其分配到id-field相比,不会有任何显着差异。自我分配标识可以让您稍微简化一下代码,并且不仅可以在持久化之后使用标识,还可以使用BEFORE。这可以简化您将来可能遇到或遇到的许多情况。

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

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