我有一个我想查询的集合如下:
似乎我需要创建一个单独评估每个文档的函数,但目前尚不清楚它是如何完成的,特别是考虑到我想做一个切片并返回符合该条件的n个项目。
示例架构:
{
title: "One",
comments: [
{
title: "comment1",
views: 9
},
{
title: "comment2",
views: 10
},
{
title: "comment3",
views: 11
},
{
title: "comment4",
views: 12
},
]
}
我想做类似的事情:
db.collection.find({"comments.views": {$gt: 10}}, {comments:{$slice: 2}})
但是这会返回带有>注释的任何文档10个视图,然后切片2评论...我想返回那些有>的评论10项。我无法在客户端上执行此操作并使用$ slice而不会丢失一些注释,因此我需要在数据库上执行此操作。想法?
答案 0 :(得分:1)
但是这会返回带有>注释的任何文档10次观看,然后 切片2评论
这是过滤多级嵌入文档的行为,通常匹配过滤器会返回整个文档,而不是子集。
通常位置运算符$用于匹配更新中的子文档。但该功能尚未在返回说明符中实现。
mongo Support for positional ($) operator in fields to return specifie r中已有一个悬而未决的问题。 (如果你真的需要这个功能,请登录投票)
所以你必须处理
通过循环遍历所有集合,参与您的应用程序。
答案 1 :(得分:0)
你可以看看聚合。您必须首先展开它,然后应用过滤器:
db.<your collection>.aggregate( [ { $unwind : "$comments" },
{$match:{"comments.views": {$gt: 10}}} ] )
检查结果并对该
应用其他操作