计算嵌入式文档 mongodb c# LINQ
Count embedded documents mongodb c# LINQ
您好,我正在尝试使用 LINQ 对数组中的文档进行计数。
我的结构很简单。这是一个简化的 Bson 示例。
{
"_id" : ObjectId("56fa945dbf0c37096048109f"),
"Commands" : [
{
"CommandId" : ObjectId("56fbdc24bf0c372078f10227"),
},
{
"CommandId" : ObjectId("56fbdc28bf0c372078f1022b"),
},
{
"CommandId" : ObjectId("570b6863bf0c370838473321"),
}
]
}
这是我到目前为止想出的,但它只说我有 1 个命令。
var result =
(from e in collection.AsQueryable<Sequence>()
where e._id == seqid
select e.Commands).Count();
Console.WriteLine("There where " + result + " Commands");
有什么想法吗?
我想出了一个解决方案,不确定它是否是最好的,但它确实有效。
var result = (from p in collection.AsQueryable().Where(p => p._id == seqid)
from cmds in p.Commands
select cmds).Count();
Console.WriteLine("There where " + result + " Commands");
我建议为此使用聚合框架和 $size - 这将避免将数组本身传输到客户端。
例如:
var result = collection.Aggregate().Match(x => x.Id == seqid)
.Project(new BsonDocument("count", new BsonDocument("$size", "$Commands")))
.FirstOrDefault()
.GetValue("count").ToInt32();
Console.WriteLine("There were " + result + " Commands");
您可以在此处阅读有关 $size 的更多信息:
https://docs.mongodb.org/manual/reference/operator/aggregation/size/
LINQ 查询始终转换为聚合框架管道
> var pipeline = [
... { "$group" : { "_id" : 1, "__result" : { "$sum" : 1 } } }
... ]
> db.test.aggregate(pipeline)
使用带过滤的简单计数方法
您好,我正在尝试使用 LINQ 对数组中的文档进行计数。
我的结构很简单。这是一个简化的 Bson 示例。
{
"_id" : ObjectId("56fa945dbf0c37096048109f"),
"Commands" : [
{
"CommandId" : ObjectId("56fbdc24bf0c372078f10227"),
},
{
"CommandId" : ObjectId("56fbdc28bf0c372078f1022b"),
},
{
"CommandId" : ObjectId("570b6863bf0c370838473321"),
}
]
}
这是我到目前为止想出的,但它只说我有 1 个命令。
var result =
(from e in collection.AsQueryable<Sequence>()
where e._id == seqid
select e.Commands).Count();
Console.WriteLine("There where " + result + " Commands");
有什么想法吗?
我想出了一个解决方案,不确定它是否是最好的,但它确实有效。
var result = (from p in collection.AsQueryable().Where(p => p._id == seqid)
from cmds in p.Commands
select cmds).Count();
Console.WriteLine("There where " + result + " Commands");
我建议为此使用聚合框架和 $size - 这将避免将数组本身传输到客户端。
例如:
var result = collection.Aggregate().Match(x => x.Id == seqid)
.Project(new BsonDocument("count", new BsonDocument("$size", "$Commands")))
.FirstOrDefault()
.GetValue("count").ToInt32();
Console.WriteLine("There were " + result + " Commands");
您可以在此处阅读有关 $size 的更多信息: https://docs.mongodb.org/manual/reference/operator/aggregation/size/
LINQ 查询始终转换为聚合框架管道
> var pipeline = [
... { "$group" : { "_id" : 1, "__result" : { "$sum" : 1 } } }
... ]
> db.test.aggregate(pipeline)
使用带过滤的简单计数方法