Javascript 如何在mongoose中使用$map和find

Javascript 如何在mongoose中使用$map和find,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我有一个集合名称事件,在文档中有如下字段 { _id:5d712ff47a545e067f0ab152 eventid:"10nm", name:"Meeting With XC", status:"Open", plans:[{ _id:5d712ff47a545e067f0ab153 dataid:1yu7 }] } {_id:5d712ff47a545e067f

我有一个集合名称事件,在文档中有如下字段

    {
_id:5d712ff47a545e067f0ab152
        eventid:"10nm",
        name:"Meeting With XC",
        status:"Open",
        plans:[{
        _id:5d712ff47a545e067f0ab153
        dataid:1yu7
        }]
    }
{_id:5d712ff47a545e067f0ab152
eventid:"10nm",
name:"Meeting With XC",
status:"Open",
planid:1yu7,
}
计划数组只有一个字段 我想得到类似这样的查询输出

    {
_id:5d712ff47a545e067f0ab152
        eventid:"10nm",
        name:"Meeting With XC",
        status:"Open",
        plans:[{
        _id:5d712ff47a545e067f0ab153
        dataid:1yu7
        }]
    }
{_id:5d712ff47a545e067f0ab152
eventid:"10nm",
name:"Meeting With XC",
status:"Open",
planid:1yu7,
}
这就是我对猫鼬的尝试

let events=await Event.find({"status":"Open"},{"eventid":1,"name":1,"planid":1},{"planid":{"$map": { "input": "$plans", "as": "ar", "in": "$$ar.dataid" }}});

但它只返回字段名称和eventid。如何获取此输出?。感谢您的帮助。

您可以使用下面的聚合

db.collection.aggregate([
  { "$match": { "status": "Open" }},
  { "$addFields": {
    "planId": {
      "$arrayElemAt": ["$plans.dataid", 0]
    }
  }},
  { "$project": { "plans": 0 }}
])

看起来您需要使用聚合,因为
$map
是聚合管道操作符。聚合条件与find?是一样。或者你可以使用javascript在find之后映射结果。但是我也需要find的一个条件?我应该把它和$match一起保存吗?@trinity Updateed