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