5

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

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

4

3 回答 3

5

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

 Document created = await client.CreateDocumentAsync(collectionLink, order);
于 2018-03-19T10:16:57.380 回答
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);

希望它可以帮助你。

于 2018-03-20T05:54:45.670 回答
1

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

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

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

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

于 2018-03-22T07:25:21.373 回答