MongoDB $第一个不支持的错误 C# driver
MongoDB $first unsupported error C# driver
我在 C# driver 中有一个聚合查询,如下所示:
var result = await _records.Aggregate()
.Match(record => record.Statuses.Any(status => status.Status == currentStatus))
.Unwind(record => record.Statuses)
.Sort(Builders<BsonDocument>.Sort.Descending("statuses.date"))
.Group(doc => doc["_id"], group => new { Id = group.Key, CurrentStatus = group.First()["statuses"] })
.Match(arg => arg.CurrentStatus["status"] == BsonValue.Create(currentStatus.ToString()))
.ToListAsync();
匹配以下 shell 语法:
db.records.aggregate(
[
{
$match : { "statuses.status" : "Finished" }
},
{
$unwind: "$statuses"
},
{
$sort: { "statuses.date":-1 }
},
{
$group: {
_id: "$_id",
current_status: { $first: "$statuses" }
}
},
{
$match : { "current_status.status" : "Finished" }
}
])
我认为 C# 版本因 CurrentStatus = group.First()["statuses"]
而无法正常工作,异常是:
System.NotSupportedException: get_Item of type MongoDB.Bson.BsonValue is an unsupported method in a $project or $group pipeline operator.
我对 First()
约定的方法基于此:
MongoDB C# Driver First Expression Reference
关于如何以 driver 喜欢的方式翻译它有什么想法吗?
在尝试了一个类似的示例之后,您似乎可以通过首先调用您的组中的 Select
来获取 statuses
字段然后调用 First()
关于:
var result = await _records.Aggregate()
.Match(record => record.Statuses.Any(status => status.Status == currentStatus))
.Unwind(record => record.Statuses)
.Sort(Builders<BsonDocument>.Sort.Descending("statuses.date"))
.Group(doc => doc["_id"], group => new
{
Id = group.Key,
CurrentStatus = group.Select(x => x["statuses"]).First()
})
.Match(arg => arg.CurrentStatus["status"] == BsonValue.Create(currentStatus.ToString()))
.ToListAsync();
我在 C# driver 中有一个聚合查询,如下所示:
var result = await _records.Aggregate()
.Match(record => record.Statuses.Any(status => status.Status == currentStatus))
.Unwind(record => record.Statuses)
.Sort(Builders<BsonDocument>.Sort.Descending("statuses.date"))
.Group(doc => doc["_id"], group => new { Id = group.Key, CurrentStatus = group.First()["statuses"] })
.Match(arg => arg.CurrentStatus["status"] == BsonValue.Create(currentStatus.ToString()))
.ToListAsync();
匹配以下 shell 语法:
db.records.aggregate(
[
{
$match : { "statuses.status" : "Finished" }
},
{
$unwind: "$statuses"
},
{
$sort: { "statuses.date":-1 }
},
{
$group: {
_id: "$_id",
current_status: { $first: "$statuses" }
}
},
{
$match : { "current_status.status" : "Finished" }
}
])
我认为 C# 版本因 CurrentStatus = group.First()["statuses"]
而无法正常工作,异常是:
System.NotSupportedException: get_Item of type MongoDB.Bson.BsonValue is an unsupported method in a $project or $group pipeline operator.
我对 First()
约定的方法基于此:
MongoDB C# Driver First Expression Reference
关于如何以 driver 喜欢的方式翻译它有什么想法吗?
在尝试了一个类似的示例之后,您似乎可以通过首先调用您的组中的 Select
来获取 statuses
字段然后调用 First()
关于:
var result = await _records.Aggregate()
.Match(record => record.Statuses.Any(status => status.Status == currentStatus))
.Unwind(record => record.Statuses)
.Sort(Builders<BsonDocument>.Sort.Descending("statuses.date"))
.Group(doc => doc["_id"], group => new
{
Id = group.Key,
CurrentStatus = group.Select(x => x["statuses"]).First()
})
.Match(arg => arg.CurrentStatus["status"] == BsonValue.Create(currentStatus.ToString()))
.ToListAsync();