我在我的ASP.net MVC应用程序中使用azure文档数据库.目前我有2个集合,其中包括Employees和Tasks.目前,文档数据库操作一切正常.
但是我找不到一种方法来对文档上传多个图像(一次不是多个图像).例如:假设我需要将2张员工照片存储在单个员工文档中.
我已经阅读了关于azure blob存储的信息,并认为我可以将它用于文件上传.但我无法澄清的是如何在每个员工文档中保留上传文件的引用.
有没有办法做到这一点?
我是NoSQL的新手,所以我可能只是有一个基本的误解......
我阅读了本教程,讲授如何使用Firebase制作聊天应用程序.例如,直接消息聊天的JSON如下所示:
{
"userMessages": {
"userid1": {
"userid2": {
"messageId1": {
"uid": "userid1",
"body": "Hello!",
"timestamp": firebase.database.ServerValue.TIMESTAMP
},
"messageId2": {
"uid": "userid2",
"body": "Hey!",
"timestamp": firebase.database.ServerValue.TIMESTAMP
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请求消息时,您将查看userMessages/UserId1/UserId2.这将给出两个用户之间的所有消息.
我决定使用DocumentDB尝试类似的东西,我不知道该怎么做.看起来我应该能够创建一个名为UserMessages的容器并将所有数据放在上面,但似乎DocumentDB只允许检索和更新顶级文档.所以在这种情况下,我需要将所有内容都放在userid1下,并且每当我添加消息时,我都需要更新整个userid1文档,包括所有未更改的消息.
我能看到这项工作的唯一方法就是将这种设计弄平.但是展平应用程序的其余部分(包含许多更复杂的对象)似乎需要创建更多的容器(每个都要花钱)当我应该能够拥有更多分层设计并仅更新我需要的层或者仅推送需要推送的其他数据.
长话短说,我对NoSQL应该如何构建有一个根本的误解,或者DocumentDB与其他NoSQL解决方案有什么不同?谢谢!
根据本文 - https://docs.microsoft.com/en-us/azure/cosmos-db/database-encryption-at-rest,静态数据在 Azure Cosmos DB(Azure 文档 DB)中加密。当我在 Azure 门户中使用数据资源管理器来查看集合时,我可以看到纯文本数据。数据在存储时是否仍处于加密状态,并且仅为 azure 门户中的数据资源管理器视图解密?
我想检索只有 documentID 和文档创建日期时间详细信息的文档。我可以通过以下查询获取 DocumentID,但我们如何获取文档创建日期时间。
select c.id from c
Run Code Online (Sandbox Code Playgroud)
但是,除了 id,我还需要获取文档创建日期
对此的任何帮助表示赞赏!
对于存储在 azure cosmos db 中的用户,我有以下结构:
{ id:string, commentHistory:[] }
在请求用户时,我执行了一个 upsert,将用户 ID 传入,这就是我所拥有的:
string requestBody = new StreamReader(req.Body).ReadToEnd();
var toUpsert = JsonConvert.DeserializeObject<dynamic>(requestBody);
var cosmos = Config.Cosmos.Get;
var media = await cosmos.GetCollection("users");
ResourceResponse<Document> result = await cosmos.UpsertDocument(Config.Cosmos.Keys.Collections.MediaCollection, toUpsert);
return result.Resource;
Run Code Online (Sandbox Code Playgroud)
这似乎也删除了 commentHistory。
如果文档不存在,是否可以进行 upsert 并仅在 id 上插入?
给出以下 JSON
{
"Families": [
{ "Name": "Smith",
"Children": [
{ "Name": "Bob",
"Pets": [
{ "Name": "Oscar", "Type": "Cat"},
{ "Name": "Otto", "Type": "Dog"}
]
},
{ "Name": "Brittney",
"Pets": [
{ "Name": "Isolde", "Type": "Dog"},
{ "Name": "Ignatz", "Type": "Turtle"}
]
}
]
},
{ "Name": "Miller",
"Children": [
{ "Name": "Alex",
"Pets": [
{ "Name": "Elvis", "Type": "Horse"}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
A)我想创建一个产生以下结构的查询
[
{ "FamilyName": "Smith",
"KidName": "Bob",
"Petname": "Oscar"
},
{ "FamilyName": "Smith", …Run Code Online (Sandbox Code Playgroud) 我在 Databricks Notebook 上编写了以下 PySpark 代码,它使用以下代码行成功地将结果从 sparkSQL 保存到 Azure Cosmos DB:
df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save()
Run Code Online (Sandbox Code Playgroud)
完整代码如下:
test = spark.sql("""SELECT
Sales.CustomerID AS pattersonID1
,Sales.InvoiceNumber AS myinvoicenr1
FROM Sales
limit 4""")
## my personal cosmos DB
writeConfig3 = {
"Endpoint": "https://<cosmosdb-account>.documents.azure.com:443/",
"Masterkey": "<key>==",
"Database": "mydatabase",
"Collection": "mycontainer",
"Upsert": "true"
}
df = test.coalesce(1)
df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save()
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我已经成功地写入了我的 Cosmos DB 数据库(mydatabase)和集合(mycontainer)

当我尝试通过使用以下更改 SparkSQL 来覆盖容器时(只需将 pattersonID1 更改为 pattersonID2,并将 myinvoicenr1 更改为 myinvoicenr2
test = spark.sql("""SELECT
Sales.CustomerID AS pattersonID2
,Sales.InvoiceNumber AS myinvoicenr2
FROM Sales
limit 4""")
Run Code Online (Sandbox Code Playgroud)
相反,使用新查询覆盖/更新集合 Cosmos DB 会按如下方式附加容器:
并且仍然在集合中保留原始查询: …
在 Cosmos DB 中,是否可以查看我的数据库创建了多少个逻辑分区以及每个分区当前的填充容量?我想知道我的分区策略划分数据的均匀程度。另外,我想在达到热分区的 20GB 限制之前准备好数据重新分配。
在 Cosmos DB v3 中,我得到了一个IOrderedQueryable<T>using GetItemLinqQueryable<T>. 这允许我编写自定义查询。问题是我想在查询实现时跟踪请求费用。如何才能做到这一点?
当我执行像ReadItemAsyncand之类的方法时ExecuteStoredProcedureAsync,返回的对象有一个RequestCharge属性,但我需要使用 linq 查询检测费用。
azure-cosmosdb ×10
azure ×6
nosql ×2
asp.net ×1
asp.net-mvc ×1
c# ×1
linq ×1
pyspark ×1
pyspark-sql ×1