Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
Node.js 使用Node JS驱动程序获取mongoDB中嵌入数组的第一个元素_Node.js_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Node.js 使用Node JS驱动程序获取mongoDB中嵌入数组的第一个元素

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

假设我将以下文档存储在mongoDB集合“people”中:

{ 
      _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方法相比,速度没有差异。