如何限制返回的字段数,并在mongodb中的单个操作中应用嵌套数组中的数组切片?

时间:2016-09-16 12:52:38

标签: mongodb

我有这样的mongodb文件:

    [{ "_id" : 5, "type" : "food", "item" : "aaa", "ratings" : [ 5, 8, 9 ] },
    { "_id" : 7, "type" : "food", "item" : "bbb", "ratings" : [ 9, 8, 7 ] }]

我想只获得字段"评分"使用$ slice限制其元素。 我可以单独应用这两个操作,如下所示:

a)仅获得评级字段:

>db.test.find( { _id: 5 }, { ratings: 1} )
{ "_id" : 5, "ratings" : [ 5, 8, 9 ] }

b)切换评级数组中的子记录数:

 >db.test.find( { _id: 5 }, { ratings: { $slice: 2 } } )
 { "_id" : 5, "type" : "food", "item" : "aaa", "ratings" : [ 5, 8 ] }

我想要的结果是:

{ "_id" : 5, "ratings" : [ 5, 8] }

如何在单个查询中以有效的方式组合这两个操作?

提前致谢。

1 个答案:

答案 0 :(得分:0)

有两种方法。

  1. 将agrregate与$ project和$ slice一起使用。
  2. 如Chridam所示。在查找命令中,您可以告诉您要显示哪个字段。
  3. 当你db.test.find({_id:5}) it is like -> select * from test where _id = 5时。

    但是当你db.test.find({_id:5},{type:0, item:0}) that make it selective on columns you want to view -> select ratings from test where _id = 5时。

    type:0 and item:0表示您对获取这些字段不感兴趣。