我的 .NET POCO 在ProperCase. 我的 json 在camelCase. 如何配置 .NET SDK 的 3.0 版以在与 Cosmos DB 之间进行序列化/反序列化时进行转换?
我知道我可以将属性添加[JsonProperty(PropertyName = "myProperty")]到每个属性,但如何告诉 SDK 默认为所有属性执行此操作?
我试图避免为每个属性添加一个属性。
我在 Microsoft Docs 上阅读了一篇关于在 .NET Azure Functions 中使用依赖项注入的文章。
一切正常,正如您在文章中看到的,它注册了 CosmosClient
builder.Services.AddSingleton((s) => {
return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
});
Run Code Online (Sandbox Code Playgroud)
问题是,如何在我的函数中使用 Cosmos Client?我不想每次都创建 Cosmos Client 实例。
public class CosmosDbFunction
{
public CosmosDbFunction()
{
}
[FunctionName("CosmosDbFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
// TODO: do something later
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 我可以使用azure cosmos db代替redis缓存进行服务器端缓存吗,我觉得cosmos db还提供键值存储,具有地理复制,读写访问和比redis缓存更低的延迟
我正在使用 DocumentDB。给定索引策略:
消息类型:字符串 - 精度 -1
设备编号 : 字符串 - 精度 -1
查询 1:
SELECT * FROM c WHERE c._ts >= 1563721200 AND c._ts < 1563807600 AND c.messageType = 'attack' AND c.deviceId >= 'A' AND c.deviceId < 'Z'
Run Code Online (Sandbox Code Playgroud)
查询 2:
SELECT * FROM c WHERE c._ts >= 1563721200 AND c._ts < 1563807600 AND c.messageType = 'attack' AND c.deviceId >= 'A' AND c.deviceId < 'Z' ORDER BY c._ts DESC
Run Code Online (Sandbox Code Playgroud)
执行代码:
var query = dbClientSource.CreateDocumentQuery<Document(UriFactory.CreateDocumentCollectionUri(db, collection),
sql,
new FeedOptions { MaxItemCount …Run Code Online (Sandbox Code Playgroud) 我们正在使用 Azure Cosmos 客户端 V3。为了获取数据,我们使用 GetItemLinqQueryable 和 ToFeedIterator 使其异步。它运行良好,但是在模拟/单元测试时,我们遇到了与 ToFeedIterator 相关的错误
代码:
IOrderedQueryable<T> linqQueryable = _container.GetItemLinqQueryable<T>(requestOptions: requestOptions);
var feedIterator = linqQueryable.Where(predicate).ToFeedIterator();
Run Code Online (Sandbox Code Playgroud)
对于模拟 UnitTestCode 代码:
var _mockResponse = new Mock<ItemResponse<Test>>();
mockContainer.Setup(x => x.GetItemLinqQueryable<Test>(It.IsAny<bool>(), It.IsAny<string>(), It.IsAny<QueryRequestOptions>())).Returns(queryable);
Run Code Online (Sandbox Code Playgroud)
它确实从 GetItemLinqQueryable 返回 1 条记录,但是 ToFeedIterator() 失败说System.ArgumentOutOfRangeException: 'ToFeedIterator is only supported on cosmos LINQ query operations Parameter name: linqQuery'
在使用以下命令执行启动后,我能够使用 python 和 Robo 3T 连接到标准的 MongoAPI 3.2 版本:
CosmosDb.Emulator.exe /EnableMongoDbEndpoint
但是,当启动模拟器时:
CosmosDb.Emulator.exe /EnableMongoDbEndpoint=3.6
我无法再与 python 连接,只能与 Robo 3T 连接。我曾尝试添加一个 mongoport 参数并使用 pymongo 引用生成的证书,但无济于事
import pymongo
from pymongo.errors import ConnectionFailure
uri = 'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&ssl_cert_reqs=CERT_NONE&retrywrites=false'
try:
# The is master command is cheap and does not require auth.
client = pymongo.MongoClient(uri)
print(client.admin.command('ismaster'))
except ConnectionFailure:
print("Server not available")
Run Code Online (Sandbox Code Playgroud) python pymongo azure-emulator azure-cosmosdb azure-cosmosdb-mongoapi
最近我遇到了一个场景,我需要在我的 CosmosDB 数据库上执行某种 DDL 和 DML 迁移(我知道这些首字母缩写词不适用于 NoSQL,但无论如何)。这些迁移计划在 CI/CD 管道中自动化和执行。
显然,很难在网上找到有关我想要实现的功能的任何信息。以下是一些标准:
我对最后一点感到非常沮丧,并试图避免创建将使用 SDK 应用 DML 更改的应用程序。在 .net 世界中,AFAIK EntityFramework 不支持 CosmosDB 中的自动迁移。
所以一个好的社区的问题是:有没有什么被认为是自动化 Cosmos DB 数据修改的好做法?
我上面所说的是否有意义,还是像处理 RDBMS 一样处理 NoSQL DBMS 的另一种尝试?
这个问题与DocumentClientfrom Microsoft.Azure.DocumentDB.Core v2.11.2. (更新:该错误也存在于Microsoft.Azure.Cosmos.)
当查询包含DateTime带有尾随零的值时,Cosmos DB 的 LINQ 提供程序中似乎存在错误。考虑以下代码:
string dateTimeWithTrailingZero = "2000-01-01T00:00:00.1234560Z"; // trailing zero will be truncated by LINQ provider :-(
DateTime datetime = DateTime.Parse(dateTimeWithTrailingZero, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
IQueryable<Dictionary<string, object>> query =
client.CreateDocumentQuery<Dictionary<string, object>>(collectionUri)
.Where(x => (DateTime) x["datetime"] <= datetime);
Run Code Online (Sandbox Code Playgroud)
结果query 包括属性所在的文档,datetime例如"2000-01-01T00:00:00.1234567Z"(即使它不应该)。
结果query并没有包含文件,其中datetime是"2000-01-01T00:00:00.1234560Z"(即使它应该)。
有什么方法可以使用DocumentClientLINQ 来DateTime正确查询属性吗?(我知道使用原始 SQL 是有效的 - 由于各种原因,我必须 …
现有的 Cosmos DB 文档需要使用新属性进行更改/更新,其他集合的现有文档也需要使用相同的新属性及其值进行更新。
是否有任何推荐的方法或工具可用于更新 Cosmos DB 上的现有文档,或者使用 Cosmos DB SDK 编写自定义 c# 应用程序/PowerShell 脚本是唯一的选择?
例子:
现有user文件
{
id:user1@mail.com,
name: "abc",
country: "xyz"
}
Run Code Online (Sandbox Code Playgroud)
更新user文档
{
id:user1@mail.com,
name: "abc",
country: "xyz",
guid:"4334fdfsfewr" //new field
}
Run Code Online (Sandbox Code Playgroud)
现有order文件user
{
id:user1@mail.com,
user: "user1@mail.com",
date: "09/28/2020",
amt: "$45"
}
Run Code Online (Sandbox Code Playgroud)
更新的order文件user
{
id:user1@mail.com,
user: "user1@mail.com",
userid: "4334fdfsfewr", // new field but with same value as in user model
date: "09/28/2020",
amt: "$45"
}
Run Code Online (Sandbox Code Playgroud) 在迁移工具中选择所有正确的详细信息后,会返回与错误相关的吞吐量值,并且 0 或 -1 没有帮助。