0

在 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
}

那可能吗?

4

1 回答 1

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。如果这不是您要找的,请告诉我。

于 2012-06-15T20:12:33.493 回答