我正在学习DocumentDb中的数据建模.这是我需要一些建议的地方
请看下面我的文档是什么样的.
我可以采取两种方法,既有利也有弊.
场景1:
如果我通过将项目团队成员信息(即姓名,电子邮件等)保存在与项目相同的文档中来保持数据非规范化(请参阅下面的文档),我可以在一个查询中获取我需要的信息但是当Jane Doe结婚,她的姓氏改变了,我必须更新Projects系列中的很多文件.我还必须非常小心地确保包含员工信息的文档的所有集合也得到更新.例如,如果我在Projects集合中更新Jane Doe的名字但忘记更新TimeSheets集合,那我就麻烦了!
场景2:
如果我保持数据有些规范化并且只在项目文档中保留EmployeeId,那么每当我想获得项目列表时,我就可以运行三个查询:
然后我可以组合我的应用程序中的所有数据.
这里的问题是DocumentDb现在似乎有很多限制.我可能正在阅读项目团队中数百名员工的数百个项目.看起来没有有效的方法来获取其Id出现在我的第二个查询中的所有员工信息.请再次注意,我可能需要在此处提取数百个员工信息.如果以下SQL查询是我用于员工数据的,我可能需要运行几次相同的查询以获取我需要的所有信息,因为我认为我不能拥有数百个OR语句:
SELECT e.Id, e.firstName, e.lastName, e.emailAddress
FROM Employees e
WHERE e.Id = 1111 OR e.Id = 2222
Run Code Online (Sandbox Code Playgroud)
我知道DocumentDb仍在预览中,其中一些限制将得到修复.话虽如此,我该如何处理这个问题?如何有效地存储/管理和检索我需要的所有项目数据 - 包括项目团队信息?方案1是更好的解决方案还是方案2还是有更好的第三种选择?
这是我的文档的样子.一,项目文件:
{
id: 789,
projectName: "My first project",
startDate: "9/6/2014",
projectTeam: [
{ id: 1111, firstName: "John", lastName: "Smith", position: "Sr. Engineer" },
{ id: 2222, firstName: "Jane", lastName: "Doe", position: "Project Manager" }
]
}
Run Code Online (Sandbox Code Playgroud)
这里有两个员工文档,它们位于Employees集合中:
{
id: 1111,
firstName: "John",
lastName: "Smith",
dateOfBirth: "1/1/1967',
emailAddresses: …Run Code Online (Sandbox Code Playgroud) 我有一个简单(字符串)数组属性的文档.
{
"id": "one",
"tags": ["A", "B"]
}
{
"id": "two",
"tags": ["A", "C"]
}
Run Code Online (Sandbox Code Playgroud)
要检查,如果某个值是数组的一部分,我可以使用ARRAY_CONTAINS
SELECT * FROM c WHERE ARRAY_CONTAINS(c.tags, "B")
Run Code Online (Sandbox Code Playgroud)
将返回文件"一".
如何查询包含数组中可能值列表的文档?
返回标签数组中至少有一个值为IN("B","C")的所有文档.
- >文件"一"和"两"
我有文件列表(对象)该对象有多个文件,即Json记录存在,但我尝试上传文件串(记录)它不上传文档数据库,但我上传单文档记录,它成功上传.
List<MyModelClass> listObj = new List<MyModelClass>();
Document doc = await DocumentClient.CreateDocumentAsync("dbs/" + DocumentDatabase.Id + "/colls/" + DocumentCollection.Id, listObj);
Run Code Online (Sandbox Code Playgroud)
上面的代码不工作.....
foreach (var item in listObj )
{
Document doc = await Client.CreateDocumentAsync("dbs/" + DocumentDatabase.Id + "/colls/" + DocumentCollection.Id, item);
}
Run Code Online (Sandbox Code Playgroud)
这段代码对我有用.....
Syntax : CreateDocumentAsync(String,?Object,?RequestOptions,?Boolean)
Object :- Document object // I Know it as per syntax it need to be "Document Type".
Run Code Online (Sandbox Code Playgroud)
我想要任何其他方式一次上传所有文档....
我是Cosmos DB的新手,我注意到我们可以根据需要设置分区键,以便通过以下代码有效扩展:
DocumentCollection myCollection = new DocumentCollection();
myCollection.Id = "coll";
myCollection.PartitionKey.Paths.Add("/deviceId");
Run Code Online (Sandbox Code Playgroud)
问题是我们可以在创建集合之后更改分区键并指定分区键吗?我可能会发现分区键的选择以后不合适.
我正在使用Change Feed Processor库(或Azure Functions Cosmos DB触发器)订阅集合更新.如何将多个独立(非竞争)消费者设置为同一集合的Feed?
一种方法是使用多个租赁集合,例如leases1,leases2等等.但这有点浪费.
有没有办法只用一个租赁集合来做到这一点?(例如,通过在某处指定使用者组名称,类似于Event Hubs Processor)
我试图在一个事务中一次将多个文档保存到“多个集合”。因此,如果其中一个保存失败,那么所有保存的文档都应该回滚
我正在使用 SpringBoot 和 SpringData 并使用 MongoAPi 连接到 Azure 中的 CosmosDB。我在他们的门户网站上读到,这可以通过编写一些存储过程来完成。但是有没有一种方法可以让我们从代码中做到这一点,就像spring如何使用@Transaction注释一样?
非常感谢任何帮助。
为什么没有CreateDocumentQuery的异步版本?
例如,此方法可以是异步的:
using (var client = new DocumentClient(new Uri(endpointUrl), authorizationKey, _connectionPolicy))
{
List<Property> propertiesOfUser =
client.CreateDocumentQuery<Property>(_collectionLink)
.Where(p => p.OwnerId == userGuid)
.ToList();
return propertiesOfUser;
}
Run Code Online (Sandbox Code Playgroud) Microsoft Cosmos DB包括DocumentDB API,Table API等.我有大约10 TB的数据,并希望有一个快速的键值查找(很少更新和写入,大多数是读取).添加Microsoft Cosmos DB的链接:https: //docs.microsoft.com/en-us/azure/cosmos-db/
我有PNG图像,我想存储在宇宙数据库中以及一些元数据.存储它的最佳方法是什么?我不想单独存储在Azure bolb存储中,更好地存储数据.