c# - 查询 documentdb 中的子字段
问题描述
例如,我在下面有一个收集 = 交付的文档:
{
"doc": [
{
"docid": "15",
"deliverynum": "123",
"text": "txxxxxx",
"date": "2019-07-18T12:37:58Z"
},
{
"docid": "16",
"deliverynum": "456",
"text": "txxxxxx",
"date": "2019-07-18T12:37:58Z"
},
{
"docid": "17",
"deliverynum": "999",
"text": "txxxxxx",
"date": "2019-07-18T12:37:58Z"
}
],
"id": "123",
"cancelled": false
}
是否可以使用“deliverynum”= 999 进行搜索,输出如下所示?
{
"doc": [
{
"docid": "17",
"deliverynum": "999",
"text": "txxxxxx",
"date": "2019-07-18T12:37:58Z"
}
],
"id": "123",
"cancelled": false
}
还是我应该为 Doc 部分制作另一个 Collection?
对于这种情况,我无法在 C# 中进行查询。
解决方案
在 Mongo shell 中,您可以使用$(projection)运算符:
db.collection.find({ "doc.deliverynum": "999" }, { "doc.$": 1 })
对应的 C# 代码如下所示:
var q = Builders<Model>.Filter.ElemMatch(x => x.doc, d => d.deliverynum == "999");
var p = Builders<Model>.Projection.ElemMatch(x => x.doc, d => d.deliverynum == "999");
var data = Col.Find(q).Project(p).ToList();
q = Builders<Model>.Filter.Empty
如果您想获取所有文档,即使不包含,您也可以使用deliverynum =``999
推荐阅读
- javascript - 如何使用 backstretch 将 alt 标签添加到图像幻灯片?
- php - 为什么我在 PHP 中收到“试图获取非对象的属性”错误?
- basic - 如何在 FreeBASIC 中搜索字符串中的单词
- java - 在这种情况下我应该如何使用流
- mysql - 强制删除数据库[没有 ifs ands or buts]
- xamarin - 赛马林。苹果手表应用程序。有模拟器吗?
- html - 将文本定位在 Div 的左右端
- meteor - 无法使用 mup 在 Digital Ocean 上部署流星 1.9
- jenkins - Jenkins 声明性管道:参数指令中的 if-else 语句
- java - 如何在下面的代码中修复此堆栈溢出错误?