我知道JOIN在文档数据库中是不可能的或不赞成的.我来自关系数据库背景,并试图了解如何处理这种情况.
假设我有一个Employees集合,我存储了所有与员工相关的信息.以下是典型的员工文档:
{
"id": 1234,
"firstName": "John",
"lastName": "Smith",
"gender": "Male",
"dateOfBirth": "3/21/1967",
"emailAddresses":[
{ "email": "johnsmith@mydomain.com", "isPrimary": "true" },
{ "email": "jsmith@someotherdomain.com", "isPrimary": "false" }
]
}
Run Code Online (Sandbox Code Playgroud)
我们还说,我有一个单独的项目集合,我存储的项目数据看起来像这样:
{
"id": 444,
"projectName": "My Construction Project",
"projectType": "Construction",
"projectTeam":[
{ "_id": 2345, "position": "Engineer" },
{ "_id": 1234, "position": "Project Manager" }
]
}
Run Code Online (Sandbox Code Playgroud)
如果我想返回我的所有项目列表以及项目团队,我该如何处理以确保我返回有关团队中个人的所有相关信息,即全名,电子邮件地址等?
这是两个单独的查询吗?一个用于项目,另一个用于ID出现在项目集合中的人员?
如果是这样,我如何插入有关人员的数据,即全名,电子邮件地址?然后我在我的应用程序中执行foreach循环来更新数据吗?
如果我依赖我的应用程序来处理所有相关数据的填充,那么这不是一个性能损失会抵消MongoDB等文档数据库的性能优势吗?
谢谢你的帮助.
是否可以更改documentDb的C#poco的默认序列化?例如,id-property似乎需要小写,但Id属性的默认序列化是大写.理想情况下,我们希望所有json属性都以小写字符开头.到目前为止我们找到的唯一方法是用[JsonProperty(PropertyName ="id")]装饰属性,但它不是很优雅.
DocumentDb不支持该DISTINCT语句.我在DocumentDB中有以下结构的文档(数千个文档):
{
"type" : "type1",
"data" : {
...
}
},{
"type" : "type2",
"data" : {
...
}
},{
"type" : "type2",
"data" : {
...
}
},{
"type" : "type2",
"data" : {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如何查询集合并获得以下结果:
{
"type" : "type1"
},{
"type" : "type2"
}
Run Code Online (Sandbox Code Playgroud) 所以我整个上午搜索但找不到满意的答案
我正在尝试编写一个通用方法(服务),它将对象作为输入(可以是JObject或Document或动态),并在集合中查询对象中的属性.
示例 - 如果您发送{"name":"abc"},我将在任何文档中搜索name ="abc".如果你发送{"name":"abc","department":"xyz"},它会搜索这两个字段.
问题 - 该方法的最佳输入应该是什么?选项 - 1. public bool Exists(Document doc)//假设我已经有了Collection.Selflink这个类.我似乎无法迭代doc对象的属性.
有没有更简单的方法来查看文档是否与集合中的任何文档匹配.我只对匹配文档中的字段感兴趣.
提前致谢!
如何在linq语句发送到服务器之前看到文档DB sql查询(在字符串中)?
_documentClient.CreateDocumentQuery<MyType>(
UriFactory.CreateDocumentCollectionUri(DatabaseName,
CollectionName)).Where(....).SelectMany(...)
Run Code Online (Sandbox Code Playgroud)
我想用它来追踪.
我在使用 DocumentDB Emulator (v. 1.11.136.2 ) 时遇到了一些问题。我能够看到资源管理器(https://localhost:8081/_explorer/index.html),但我无法使用资源管理器和 SDK 创建任何 Database\Collection(我尝试使用该页面提供的示例代码和我自己的代码)。
我总是得到:
{"readyState":4,"responseText":"{\"code\":\"ServiceUnavailable\",\"message\":\"Service is currently unavailable.\\r\\nActivityId: 9c9f56f8-91f9-4fad-b592-0c6bd5bbd300\"}","responseJSON":{"code":"ServiceUnavailable","message":"Service is currently unavailable.\r\nActivityId: 9c9f56f8-91f9-4fad-b592-0c6bd5bbd300"},
"status":503,
"statusText":"error"}
Run Code Online (Sandbox Code Playgroud)
我正在运行 Windows 10。我已经尝试重新启动 PC 并重新安装 SDK\Emulator。
我正在使用带有 mongoAPI(spring 数据,mongoRepository)的 azure cosmosdb 每天早上,第一个从 mongo 获取数据的请求会导致异常:
后续请求无需执行任何操作即可成功。
知道是什么原因造成的吗?有没有办法让 spring 自动恢复连接而不会请求失败?
谢谢
例外:
org.springframework.data.mongodb.UncategorizedMongoDbException: Exception sending message; nested exception is com.mongodb.MongoSocketWriteException: Exception sending message
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2135)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1978)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1784)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1767)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:641)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$CollectionExecution.execute(MongoQueryExecution.java:79)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingExecution.execute(MongoQueryExecution.java:411)
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:94)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:483)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
...
Caused by: com.mongodb.MongoSocketWriteException: Exception sending message
at com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:465)
at com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:208)
at com.mongodb.connection.UsageTrackingInternalConnection.sendMessage(UsageTrackingInternalConnection.java:90)
at com.mongodb.connection.DefaultConnectionPool$PooledConnection.sendMessage(DefaultConnectionPool.java:429)
at com.mongodb.connection.CommandProtocol.sendMessage(CommandProtocol.java:189) …Run Code Online (Sandbox Code Playgroud) 有没有人比较过 Azure SQL 成本与 DocumentDB/CosmosDB 成本?我不清楚 Azure CosmosDB 成本中显示的 RU。例如,1 TB db 中的 1 个请求不能等于 1 GB db 中的 1 个请求。
如果我没有分区键值,如何删除文档?
我有id文档和分区键的属性名称(在我的例子中:)type。
我试过:
var docLink = UriFactory.CreateDocumentUri(databaseName, collectionName, documentId);
var resp = client.DeleteDocumentAsync(docLink).Result;
Run Code Online (Sandbox Code Playgroud)
有错误: PartitionKey value must be supplied for this operation.
示例文档:
{
"id": "AB12CD",
"type": "Company",
"Address": "123 Test Street"
}
Run Code Online (Sandbox Code Playgroud)
我试图获取特定文档 ID 的分区键值
使用 C# 代码...
我试图通过它读取文档id,然后提取该type值,但出现错误:InvalidOperationException: PartitionKey value must be supplied for this operation.使用以下代码。
var response = client.ReadDocumentAsync(UriFactory.CreateDocumentUri(databaseName, collectionName, id)).Result;
Run Code Online (Sandbox Code Playgroud)
我还尝试了跨分区查询:
FeedOptions queryOptions = new FeedOptions { MaxItemCount = 10 };
queryOptions.EnableCrossPartitionQuery = true;
var queryString …Run Code Online (Sandbox Code Playgroud) 围绕 CosmosDB .NET SDK,我发现了一个有趣的问题。我想对以下查询使用 SDK LINQ 支持:
SELECT VALUE COUNT(1) FROM c WHERE <predicate>
Run Code Online (Sandbox Code Playgroud)
好吧,在编写 LINQ 查询之后,我立即意识到可能无法处理诸如文档查询之类的查询。但是,由于文档查询允许您捕获查询指标并在结果页面之间解除阻塞线程,因此我非常喜欢它。这是代码:
client.CreateDocumentQuery<TEntity>.Where(<predicate>).Count()
Run Code Online (Sandbox Code Playgroud)
即使我知道 Count() 的结果类型不是 IQueryable,有没有办法将“计数”查询作为文档查询处理?