在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
}
这可能吗?
答案 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
但是,您应该注意,db.eval()是一个阻塞操作,因此对于长时间运行的作业,您应该使用map reduce。如果这不是你想要的,请告诉我。