如何从mongodb中的分组数组中获取第一项

时间:2017-10-27 12:39:49

标签: c# mongodb

我有一个查询,它在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合作赚取第一笔费用?

1 个答案:

答案 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();