2014-03-07 21 views
0

我有这样MongoDB中的文档 -如何限制它具有阵列MongoDB的文档查询的结果

{ 
name: "Myname", 
Auth: "myAuth", 
Books:[{ 
     b_name: "bookname", 
     b_type: "tech", 
     datetime: "datetime" 
    }], 
dept: "IT" 
} 

现在,如果我只是想根据过滤条件来获得name字段中,我可以查询像 -

db.books.find({ dept: "IT" } , { Myname:1, Auth:1, _id:0 }) 

但是,如果我想获得一个单一的领域,以及在阵列"Books"数组字段中的一个,我该如何查询MongoDB

我想是这样 -

db.books.find({ dept: "IT" } , { Myname:1, Auth:1, Books.b_name:1, _id:0 }) 

上面的查询将无法正常工作。

+0

这就是你想要的数目进行限制的问题数组元素返回?或者在查询中有语法错误?如果您的问题是前者,请使用['$ slice'](http://docs.mongodb.org/manual/reference/operator/projection/slice/) – numbers1311407

+0

@ numbers1311407 $ slice只在数组中的位置相关**是已知**否则推荐使用投影和* match *运算符。 –

回答

1

投影属性是JSON/doccument字段。你没有像Myname这样的字段。其次,你必须使用的子文件,如 'Books.b_name'

查询报价:

db.books.find({ dept: "IT" } , { name:1, 'Auth':1, 'Books.b_name':1, _id:0 }) ; 

输出:

{ "name" : "Myname", "Auth" : "myAuth", "Books" : [ { "b_name" : "bookname" } ] } 
+0

我建议任何能够查看编辑历史记录的人,因为您似乎有编辑您的答案的历史,可以查看其他人的结果。很伤心你看起来像这样绝望。 –

+0

要点是“为读者”,这张海报有提交**错误答案的历史**,然后从别人处复制正确的答案。从评论中可以看出,缺乏理解延伸到**不理解**如何标记正确评论该帖子的另一用户。请考虑评估您的投票。 –

+0

Sumeet,是的,我只是在名称字段中输入错字。你是正确的,我也试过你的查询与报价,它的工作。谢谢您的帮助。 – Arpan