MongoDB:获取子字段的长度作为查询的一部分

时间:2012-06-15 17:00:22

标签: mongodb

在mongodb中,有没有办法在查询中询问子字段的长度?

假设我有一个blog_post集合,每个帖子都有字段标题和内容(两个文本字段),以及一个包含评论列表的评论字段。

我想做这样的事情:

db.blog_posts.find(
  {_id:ObjectId("4fd69d962fa6cd0a8e00002d")},
  {"title":1, "content": 1, "comments": $length}
)

然后回来:

{
  "_id" : ObjectId("4fd69d962fa6cd0a8e00002d"),
  "title" : "Curae proin eni",
  "content" : "Etiam lacus euismod litora malesuada tempus a adipiscing mus.",
  "comments" : 27
}

这可能吗?

1 个答案:

答案 0 :(得分:1)

您不能以这种方式使用查询返回字段的长度,但您可以使用map reduce来查找数组的长度: http://www.mongodb.org/display/DOCS/MapReduce

您还可以使用db.eval()通过创建一个获取文档的_id的函数来返回数组“a”的长度: {_id:1,a:[1,2,3]}

t = function (id) {
        return db.eval(function (id) {
           var t = db.test.findOne({_id:id});
           var total = t.a.length;
           return total;
        }, 
        id);
    }

t(1) = 3

http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Using%7B%7Bdb.eval%28%29%7D%7D

但是,您应该注意,db.eval()是一个阻塞操作,因此对于长时间运行的作业,您应该使用map reduce。如果这不是你想要的,请告诉我。