如何在azure文档Db中重命名数据库名称或集合名称?我们在documentdb数据库中有一组集合.是否可以为其他目的更改集合名称
有没有办法更新DocumentDB集合中的部分文档?
我知道可以ReplaceDocumentAsync让你更新文档,但是你必须替换整个文档.这听起来有点可怕.如果我有一个嵌套了其他对象的对象,我将不得不查询父文档,然后替换整个文档以更新对象的嵌套部分.
DocumentDB的处理ReplaceDocumentAsync方式是否使其表现得比表面看起来更好?
在使用.NET SDK的Azure DocumentDB中,调用ReplaceDocumentAsync时出现以下错误:
"错误":["输入内容无效,因为所需的属性 - 'id;' - 缺失","请求有效负载无效.确保提供有效的请求有效负载."]
这是博客文章的场景,当添加新评论时,我获取文档,添加评论并调用ReplaceDocumentAsync.我是这样做的:
string query = "SELECT * FROM Posts p WHERE p.id = 'some guid'";
var post = Client.CreateDocumentQuery<Post>(Collection.DocumentsLink, query)
.AsEnumerable().FirstOrDefault();
post.Comments.Add(comment);
Document doc = Client.CreateDocumentQuery(Collection.DocumentsLink)
.Where(d => d.Id == id)
.AsEnumerable()
.FirstOrDefault();
var document = await Client.ReplaceDocumentAsync(doc.SelfLink, item);
Run Code Online (Sandbox Code Playgroud)
发布课程:
public class Post
{
public Post()
{
Comments = new List<Comment>();
}
public Guid Id { get; set; }
public List<Comment> Comments { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我们有一个多租户应用程序,它使用Azure DocumentDB作为我们的NoSQL文档导向数据库.
对于多租户,我们会阅读此问题和此博客文章.因为现在我们的用户数量不满足使用不同数据库的需要和/或documentCollections更重要的是,为了节省成本,我们在TenantId字段上使用"Where"子句实现多租户documentCollection.
类似地,当涉及存储具有完全不同性质的"文档"或"对象"时(例如Book和Car),我们对使用它的事实提出质疑documentCollection.
首先,创建两个不同的documentCollectionfor Book和看起来更合理Car.但是,documentCollection最低成本为25美元.我们不想每次需要添加新功能时支付+ 25美元,即使它是存储少量数据(例如我们的应用程序存储了很多Books但很少Cars......).
把书和车放在一起是一个好的设计documentCollection吗?并在共享成员中保留对文档类型的引用(例如string Type ="Book" or string Type = "Car").
知道我们已经使用Where"子句"实现了多租户,在我们的应用程序中查询给定租户的所有汽车,我们的查询都将包含Where TenantId ="XXXX" AND Type = "Car".
我已经看到DocumentDB现在支持Partitioned Collection.这可能是对分区的良好使用,或者相反,它们应该保持以实现更好的可伸缩性,并且不适合隔离其对象数量可能不相似的不同文档类型?
我正在构建一个.Net控制台应用程序来读取DocumentDB中的信息.控制台应用程序具有来自EventHub的数据,并在进入云时插入/更新最新数据.
我正在尝试从DocumentDB读取单个文档,我可以在请求文档之前确认文档存在.
if (DocumentDBRepository<DocumentDBItem>.DoesItemExist(name))
{
device = await DocumentDBRepository<DocumentDBItem>.GetItemAsync(name);
}
Run Code Online (Sandbox Code Playgroud)
我使用Microsoft的这个教程来构建用于访问DocumentDB记录的存储库,并且成功地使用了几乎所有方法.我可以更新/删除/查询数据库,但我无法读取单数项.
首先,它抛出了一个请求PartitionKey的异常.所以我修改了方法,将DB使用的PartitionKey添加到请求中.一旦我添加了PartitionKey,它就会抛出另一个异常,并显示一条消息"找不到资源"
public static async Task<T> GetItemAsync(string id)
{
try
{
RequestOptions options = new RequestOptions();
options.PartitionKey = new PartitionKey("DeviceId");
Document document = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, id), options);
return (T)(dynamic)document;
}
catch (DocumentClientException e)
{
if (e.StatusCode == HttpStatusCode.NotFound)
{
return null;
}
else
{
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经修改了我的调用以使用"GetItemsAsyc"并获得IEnumerable的文档并获得列表中的第一项,但是为什么我可以使用教程中的所有其他方法但这一点仍然有效是没有意义的抛出异常说"资源未找到".
我得到的例外情况:
"Message: {\"Errors\":[\"Resource Not Found\"]}\r\nActivityId: e317ae66-6500-476c-b70e-c986c4cbf1d9, Request URI: /apps/e842e452-2347-4a8e-8588-2f5f8b4803ad/services/2c490552-a24d-4a9d-a786-992c07356545/partitions/0281cfdd-0c60-499f-be4a-289723a7dbf9/replicas/131336364114731886s"
Run Code Online (Sandbox Code Playgroud) 是否可以使用Azure Cosmos Graph DB中的包含搜索顶点属性?
例如,我想找到所有'Jr'以他们名义的人?
g.V().hasLabel('person').has('name',within('Jr')).values('name')
Run Code Online (Sandbox Code Playgroud)
似乎该within('')函数仅过滤完全相等的值'Jr'.我正在寻找一个包含.理想情况下不区分大小写.
我正在使用Azure Cosmos DB,我正在使用C#(Web服务)编写客户端,我正在使用java脚本编写一些服务器端存储过程.
如何调试存储过程的代码?
谢谢,
MAK
我想通过以下查询从Cosmos DB中检索数据:
pi
(这是一个sql查询,我可以在mysql中使用)
这是pi一个字符串值.这可以是09001001或09025001.
那么有没有办法在Cosmos DB中使用like命令.我知道cosmos DB使用CONTAINS,但是当类似的通配符不在字符串的开头或结尾时,不能使用它.
我正在尝试使用PageSize和返回cosmosDB中的项目PageNumber.我知道我们可以设置页面大小MaxItemCount,但是我们如何将页码放在这个函数中?
这是我到目前为止所得到的:
public async Task<IEnumerable<T>> RunSQLQueryAsync(string queryString, int pageSize, int pageNumber)
{
var feedOptions = new FeedOptions { MaxItemCount = pageSize, EnableCrossPartitionQuery = true };
IQueryable<T> filter = _client.CreateDocumentQuery<T>(_collectionUri, queryString, feedOptions);
IDocumentQuery<T> query = filter.AsDocumentQuery();
var currentPageNumber = 0;
var documentNumber = 0;
List<T> results = new List<T>();
while (query.HasMoreResults)
{
foreach (T t in await query.ExecuteNextAsync())
{
results.Add(t);
documentNumber++;
}
currentPageNumber++;
return results;
}
return null;
}
Run Code Online (Sandbox Code Playgroud) mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest尝试通过以下方式启动容器时使用以下图像:
docker run --name azure-cosmosdb-emulator --memory 2GB --interactive --tty -p 8081:8081 -p 8900:8900 -p 8901:8901 -p 8902:8902 -p 10250:10250 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254 -p 10255:10255 -p 10256:10256 -p 10350:10350 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Run Code Online (Sandbox Code Playgroud)
我在上述所有内容中都遇到相同的错误:
2022-11-15 16:34:08 Error: The evaluation period has expired.
2022-11-15 16:34:08 ./cosmosdb-emulator: ERROR: PAL initialization failed. Error: 104
Run Code Online (Sandbox Code Playgroud)
我尝试删除容器/图像并拉最新的但无济于事
azure-cosmosdb ×10
azure ×8
c# ×3
.net ×1
asp.net ×1
asp.net-core ×1
docker ×1
gremlin ×1
javascript ×1
nosql ×1
pagination ×1
paging ×1