我有一个查询返回第一个元素等于字符串的文档。
示例文件:
{
"_id" : 1,
"personal" : {
"gender" : "Male",
"given_names" : [
"Trent",
"Paul"
],
"surname" : "James",
"date_of_birth" : ISODate("1984-04-28T23:00:00.000Z")
},
enrollments: [{
"start_date" : ISODate("2003-01-29T00:00:00.000Z"),
"name" : "Psychology",
"school" : "Humanities",
"score" : 27
}]
}
查询:
db.students.find({
'personal.given_names.0': 'Trent'
})
我想只投射第一个元素。我尝试过使用$slice
:
db.students.find({
'personal.given_names.0': 'Trent'
}, {
'personal.given_names': {
$slice: 1
}
})
这确实将数组限制为第一个,但是预测其他所有内容。我还尝试将1
和$slice
运算符传递给投影,但如果看起来1
总是覆盖$slice
(无论是否排序)。
'personal.given_names': [1, { $slice: 1 }]
'personal.given_names': [ { $slice: 1 }, 1 ]
我也尝试直接引用序数位置:
'personal.given_names.0': 1
如何只输出 数组的第一个元素?
答案 0 :(得分:1)
试试这个
db.students.find({
'personal.given_names': 'Trent'
}, {
'personal.given_names.$': 1
})//removed ".0" from find
答案 1 :(得分:0)
使用聚合框架,您可以这样做:
db.students.aggregate({
$match: { 'personal.given_names.0': 'Trent' } // find matching documents only
}, {
$project: {
'_id': 0, // remove "_id" field from output (and kind of everything else)
'nameInArray': { $slice: [ '$personal.given_names', 1 ] }, // return only the first element of the array but still as an array
'nameOnly': { $arrayElemAt: [ '$personal.given_names', 0 ] }// return only the first element of the array
}
})