Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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
Javascript 如何查询和排序Mongoose子文档_Javascript_Mongodb_Mongoose_Mongodb Query_Aggregation Framework - Fatal编程技术网

Javascript 如何查询和排序Mongoose子文档

Javascript 如何查询和排序Mongoose子文档,javascript,mongodb,mongoose,mongodb-query,aggregation-framework,Javascript,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我需要获得卡牌内的卡牌,该卡的统计数据最低。请查看wDate值 例如,对以下内容的查询: { "_id": "608642db80a36336946620aa", "cards": [ { "stats": { "reviewDate": "1985-03-26T04:34:17.425Z"

我需要获得
卡牌
内的
卡牌
,该卡的
统计数据最低。请查看wDate

例如,对以下内容的查询:

{
    "_id": "608642db80a36336946620aa",
    "cards": [
        {
            "stats": {
                "reviewDate": "1985-03-26T04:34:17.425Z",
            },
            "_id": "6086430080a36336946620ab",
            "front": "front",
            "back": "back"
        },
        {
            "stats": {
                "reviewDate": "2021-05-26T04:34:17.425Z",
            },
            "_id": "6086430080a36336946620ab",
            "front": "front",
            "back": "back"
        },
        {
            "stats": {
                "reviewDate": "2021-04-26T04:34:17.425Z",
            },
            "_id": "6086430080a36336946620ab",
            "front": "front",
            "back": "back"
        }
    ]
}
应返回:

       {
            "stats": {
                "reviewDate": "1985-03-26T04:34:17.425Z",
            },
            "_id": "6086430080a36336946620ab",
            "front": "front",
            "back": "back"
        }
我试图通过按降序排列卡片并阅读列表中的第一项来实现这一点:

 DeckModel.findById(req.params.deckId, 'cards')
  .sort({'cards.stats.dateCreated': 'desc'})
  .exec((err, docs) => {
    if(err) { return next(err) }
    console.log(docs.cards.[0]);
  });
但是它不起作用-当然是因为我对.sort()的理解不好)

这是一个与我的问题相似的问题,尽管没有公认的答案

如何构造返回所需结果的查询

如果需要,以下是我的模式:

    var DeckSchema = new Schema ( 
      {
        title: { type: String, required: true, maxlength: 255 },
        cards: [CardSchema]
      }
    )
谢谢大家

  • 酸牙
演示-


非常感谢你的回答!这确实有帮助。如果你有时间,你能看看我的电话号码吗?我真的很感激。@Sour\u Tooth done:)
    var CardSchema = new Schema(
      {
        stats: {
          reviewDate: {type: Date, default: Date.now(), required: true},
        },
        front: String,
        back: String
      }
    )
db.collection.aggregate([
  // { $match: {  } }, your query here
  { $unwind: "$cards" },
  { $sort: { "cards.stats.dateCreated": -1 } },
  { $limit: 1 },
  { $replaceRoot: { "newRoot": "$cards" } }
])