我有一个查询,它在shell中完美运行
db.getCollection('chatmessages').aggregate(
[
{
$match : {
ChatId: { $in : [ObjectId("59edf7d34330cf25d6acd3fb")] }
},
},
{
$group : {
_id : { ChatId : "$ChatId" },
LastMessage : { $first : "$$CURRENT"}
}
}
])
但是当我试图让它在c#中工作时:
var list = await _mongoCollection.Aggregate()
.Match(mes => chatIdsObject.Contains(mes.ChatId))
.SortBy(mes => mes.ChatId)
.ThenByDescending(mes => mes.CreateDateTime)
.Group(
key => key.ChatId,
group => new
{
ChatId = group.Key,
LastMessage = group.Select(x => x).First()
})
.ToListAsync();
我收到错误:
$ project或$ group不支持{document}。
有没有办法在C#中与$$ CURRENT合作赚取第一笔费用?
答案 0 :(得分:0)
另一种方法是将json注入管道中:
var list = await _mongoCollection.Aggregate()
.Match(mes => chatIdsObject.Contains(mes.ChatId))
.SortBy(mes => mes.ChatId)
.ThenByDescending(mes => mes.CreateDateTime)
.Group(new JsonProjectionDefinition<ChatMessages>(@"{
'_id' : { 'ChatId' : '$ChatId' },
'LastMessage' : { '$first' : '$$CURRENT' }
}"))
.ToListAsync();