【问题标题】:how to query data inside an array of the collection using mongoose如何使用猫鼬查询集合数组中的数据
【发布时间】:2017-04-03 20:23:39
【问题描述】:

我有一个像这样的猫鼬模式:

 var LogsSchema = new Schema({
    date: Date,
    longitude: String,
    latitude: String,
    speed: Number
 });

var DeviceSchema = new Schema({

name: String,
model: String,
phone: {
    type: Number,
    required: true,
    unique: true
},
push: Number,   
logs: [LogsSchema],
})

我的数据库中有大量日志,如何排序限制并跳过日志数组数据? 目前我只取数组的最后 10 个元素,但我想选择应用条件。使用 $elemMatch 并不能解决我从整个集合中显示的问题,但我需要从单个文档中获取。 希望是从日期范围内查找日志。 任何建议都非常感谢。

【问题讨论】:

  • 您能否展示一个您尝试过的示例查询以及您对一些示例文档的预期输出?

标签: arrays node.js mongodb mongoose


【解决方案1】:

使用聚合框架。$展开您的日志数组并应用您想要的任何条件 $sort $match,skip.或者您可以在 $project 阶段检查 $filter,请发布您的预期输出,我会尝试一下

db.collection.aggregate([{"$unwind" : "$logs"},
{$match : {"$and" :  [{"logs.date" :{$gte : fromDate} },
{"logs.date" :{"$lte" : toDate}}]}},
{"$group" : "_id" : "_id",
"logs" : {"$push" : "$logs"},
"names" :{"$first" : "$name"}
}])

或者如果使用 mongodb 3.2,你可以使用 $filter

{
  $filter: {
     input: logs,
     as: "num",
     cond: { $and: [
        { $gte: [ "$$num.date", fromDate ] },
        { $lte: [ "$$num.date", toDate ] }
      ] }
  }
}

【讨论】:

  • 我想从 $gte:"a_date", $lte:"a_date" 获取日志
猜你喜欢
  • 1970-01-01
  • 2017-04-18
  • 2017-09-24
  • 2021-09-03
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
相关资源
最近更新 更多