查询documentdb中的子字段 [英] Querying a subfield in documentdb
本文介绍了查询documentdb中的子字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
例如,我下面有一个用于收集=交货的文档:
For example I have a document below for collection = delivery:
{
"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进行搜索,并且输出如下所示?
is it possible to do a search with "deliverynum" = 999 and the output would be like below?
{
"doc": [
{
"docid": "17",
"deliverynum": "999",
"text": "txxxxxx",
"date": "2019-07-18T12:37:58Z"
}
],
"id": "123",
"cancelled": false
}
还是我应该为文档部分创建另一个收藏集?
or should I make another Collection just for the Doc part?
在这种情况下,我很难用C#进行查询.
I am having trouble making a query in C# for this kind of scenario.
推荐答案
在Mongo shell中,您可以使用 $(投影)运算符:
In Mongo shell you can use the $(projection) operator:
db.collection.find({ "doc.deliverynum": "999" }, { "doc.$": 1 })
对应的C#代码如下所示:
Corresponding C# code can look like below:
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();
如果您要获取所有文档(即使其中不包含deliverynum =``999
You can also use q = Builders<Model>.Filter.Empty
if you want to get all documents even if the don't contain deliverynum =``999
这篇关于查询documentdb中的子字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文