Jquery MongoDB:检索、筛选和排序MongoDB嵌入式集合

Jquery MongoDB:检索、筛选和排序MongoDB嵌入式集合,jquery,asp.net,mongodb,linq,Jquery,Asp.net,Mongodb,Linq,以下是简单的结构(post.comments) 由于数据量大,正在获取帖子并忽略评论: BGStream stream = await db.Streams .Find(m => m.Id == new ObjectId(id)) .Project<BGStream>(Builders<BGStream>.Projection .Exclude(m => m.Comments))

以下是简单的结构(post.comments)

由于数据量大,正在获取帖子并忽略评论:

BGStream stream = await db.Streams
            .Find(m => m.Id == new ObjectId(id))
            .Project<BGStream>(Builders<BGStream>.Projection
               .Exclude(m => m.Comments))
            .FirstOrDefaultAsync();
BGStream-stream=wait db.Streams
.Find(m=>m.Id==newobjectid(Id))
.项目(建筑商)
.Exclude(m=>m.Comments))
.FirstOrDefaultAsync();
通过ajax从comments controller获取缺少的注释,但有限制(不是一个好的解决方案):

var filter=Builders.filter.Eq(“_id”,新ObjectId(id));
var projection=Builders.projection
.Include(m=>m.Comments).Slice(“Comments”,skip:skip,limit:take);
var stream=await db.Streams
.查找(筛选).项目(投影)
.FirstOrDefaultAsync();
问题: 我不知道如何按时间戳对注释集合进行排序。我必须首先获取最新的注释,但查询首先会提供最旧的注释

我在这里缺少什么?

使用聚合和如下操作

db.collection_name.aggregate([
    {
        "$unwind" : "$comments"
    },
    {
        "$sort" : {
            "comments.timestamp" : -1
        }
    },
    {
        "$group" : {
            "_id" : null,
            "comments" : {
                "$push" : "$comments"
            }
        }
    }
])

您可以使用来限制评论的数量

如果您在问题中提到有数千条评论,我建议您考虑拆分文档并将评论移动到单独的集合中。这将使您能够更自由地获取评论,并以您想要的方式重新构建文档。请参阅文档中的
$lookup
,我已经考虑过了,但是如果我拆分这个,CRUD操作很难实现。删除链等…将实施额外的集合。Thx Saleem。这是一个有效的解决方案,但在调用$unwind后,我必须处理匿名BSONObject。我认为最好像上面提到的Saleem那样将评论存储在额外的集合中。
var filter = Builders<BGStream>.Filter.Eq("_id", new ObjectId(id));
var projection = Builders<BGStream>.Projection
          .Include(m => m.Comments).Slice("comments", skip: skip, limit: take);
var stream = await db.Streams
    .Find(filter).Project<BGStream>(projection)
    .FirstOrDefaultAsync();
db.collection_name.aggregate([
    {
        "$unwind" : "$comments"
    },
    {
        "$sort" : {
            "comments.timestamp" : -1
        }
    },
    {
        "$group" : {
            "_id" : null,
            "comments" : {
                "$push" : "$comments"
            }
        }
    }
])