Node.js 使用Node JS驱动程序获取mongoDB中嵌入数组的第一个元素
假设我将以下文档存储在mongoDB集合“people”中:Node.js 使用Node JS驱动程序获取mongoDB中嵌入数组的第一个元素,node.js,mongodb,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongodb Query,Aggregation Framework,假设我将以下文档存储在mongoDB集合“people”中: { _id: 489324, name: "Ryan Jones" skills: [ "fishing", "programming" ] } 我试图找回Ryan Jones在数组中的第一个技能(技能[0]) 这似乎是一个非常简单的操作,但我似乎无法使用NodeJS驱动程序来完成。我可以轻松检索技能数组: db.collection('people').findOne({ name:"Ryan Jon
{
_id: 489324,
name: "Ryan Jones"
skills: [ "fishing", "programming" ]
}
我试图找回Ryan Jones在数组中的第一个技能(技能[0])
这似乎是一个非常简单的操作,但我似乎无法使用NodeJS驱动程序来完成。我可以轻松检索技能数组:
db.collection('people').findOne({ name:"Ryan Jones"},{ projection: { skills:1 }})
…但我不想通过电线传输整个阵列。我只想去钓鱼
我曾尝试在投影中使用切片和阵列映射,但我得到了一个MongoError。如何使用NodeJS驱动程序实现这一点?它是否需要更复杂的聚合操作而不是findOne 您可以通过聚合实现这一点,比如
db.collection('people').aggregate([
{
$match: {
name: "Ryan Jones"
}
},
{
$project: {
name: 1,
skills: {
$arrayElemAt: [
"$skills",
0
]
},
}
}
])
请参见演示尝试以下方法:
db.collection('people').findOne({
name: "Ryan Jones"
},
{
skills: {
$slice: 1
}
})
我通过将其包装在NodeJS驱动程序所需的{projection:…}中,成功地实现了这一点。但是,默认行为是在文档中投影其他字段,因此我必须手动将它们设置为不投影,即_id:0,name:0Thanks,此聚合也可以工作,并且在计时操作后,与Valijon提出的findOne方法相比,速度没有差异。