Mongodb:查询文档中的数组元素

时间:2011-10-07 21:05:55

标签: mongodb

我有一个我想查询的集合如下:

  • 返回所有文件
  • 最多2条评论(例如,切片,0,1或2条评论)
  • 所有评论都必须包含视图> 10

似乎我需要创建一个单独评估每个文档的函数,但目前尚不清楚它是如何完成的,特别是考虑到我想做一个切片并返回符合该条件的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而不会丢失一些注释,因此我需要在数据库上执行此操作。想法?

2 个答案:

答案 0 :(得分:1)

  

但是这会返回带有>注释的任何文档10次​​观看,然后   切片2评论

这是过滤多级嵌入文档的行为,通常匹配过滤器会返回整个文档,而不是子集。

通常位置运算符$用于匹配更新中的子文档。但该功能尚未在返回说明符中实现。

mongo Support for positional ($) operator in fields to return specifie r中已有一个悬而未决的问题。 (如果你真的需要这个功能,请登录投票)

所以你必须处理

  • 最多2条评论(例如,切片,0,1或2条评论)

通过循环遍历所有集合,参与您的应用程序。

答案 1 :(得分:0)

你可以看看聚合。您必须首先展开它,然后应用过滤器:

db.<your collection>.aggregate( [ { $unwind : "$comments" }, 
    {$match:{"comments.views": {$gt: 10}}} ] )

检查结果并对该

应用其他操作