Jquery MongoDB:检索、筛选和排序MongoDB嵌入式集合
以下是简单的结构(post.comments) 由于数据量大,正在获取帖子并忽略评论: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))
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"
}
}
}
])