Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:将查询限制为字段和数组投影_Mongodb - Fatal编程技术网

MongoDB:将查询限制为字段和数组投影

MongoDB:将查询限制为字段和数组投影,mongodb,Mongodb,我有一个包含以下信息的集合 { "_id" : 1, "info" : { "createdby" : "xyz" }, "states" : [ 11, 10, 9, 3, 2, 1 ]} } 我使用查询只投影状态 db.jobs.find({},{states:1}) 然后我只得到状态(和整个状态值数组)!或者,我只能通过选择该数组中的一个状态 db.jobs.find({},{states : {$slice : 1} }) 然后我只得到一个状态值,但同时也得到文档中

我有一个包含以下信息的集合

{
  "_id" : 1, 
  "info" : { "createdby" : "xyz" }, 
  "states" : [ 11, 10, 9, 3, 2, 1 ]}
}
我使用查询只投影状态

db.jobs.find({},{states:1})
然后我只得到状态(和整个状态值数组)!或者,我只能通过选择该数组中的一个状态

db.jobs.find({},{states : {$slice : 1} })
然后我只得到一个状态值,但同时也得到文档中的所有其他字段


有没有办法只选择“states”字段,同时只对数组中的一个元素进行切片。当然,我可以排除字段,但我希望有一个解决方案,我可以指定这两个条件

您可以通过两种方式完成此操作:

1> 使用like

:指定包含的字段

:指定该字段的抑制项

所以你的问题是

db.jobs.find({},{states : {$slice : 1} ,"info":0,"_id":0})
2> 使用as的其他方法


他是你的朋友<代码>$REWIND状态;使用
$match
进行筛选,使用
$project
重新设置或排除字段扫描您发布的预期输出?@yogesh预期输出应仅包含一个数组值的“状态”。因此,对于简单的字段选择,字段选择工作正常。允许在find投影中使用这些简单的限制表达式是一个好主意吗?我使用aggregation包括[{$project:“states”}、{$unwind:“states”}、{$limit:1}]
db.jobs.aggregate({
    "$unwind": "$states"
  }, {
    "$match": {
      "states": 11
    }
  }, // match states (optional)
  {
    "$group": {
      "_id": "$_id",
      "states": {
        "$first": "$states"
      }
    }
  }, {
    "$project": {
      "_id": 0,
      "states": 1
    }
  })