如何检索我添加到 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等
我有一个集合,我要在其中插入不同类型的文档。我使用类型参数来区分集合中的不同数据类型。当我插入文档时,我为每个文档创建了一个 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等