如何在猫鼬中查询对象数组内的值

时间:2019-09-13 10:18:30

标签: javascript node.js mongoose

我正在尝试获取文档,该文档是'periods'数组的'from'中的'from'字段值。

我已经尝试了以下方法,但是它不起作用。我该怎么办?

periods = [{
    from: 333,
    to: 555
},
{
    from: 666,
    to: 777
}]

var eqbookschema = new Schema({
eq_dbId: String,
user_dbId: String,
from: Number,
to: Number,
timestamp: Number,
}, {collection: 'book'});

EQBook = mongoose.model('EQBook', eqbookschema)

EQBook.find({
    eq_dbId: req.body.eq_dbId,
    from: {$in: [periods.from]}
})

我尝试过的查询仅返回空数组,尽管存在。

3 个答案:

答案 0 :(得分:1)

由于periods是一个对象数组,因此您想根据每个元素的from字段进行查找,因此需要首先对其进行映射:

let froms = periods.map(val => val.from);

然后使用映射数组查找:

EQBook.find({
  eq_dbId: req.body.eq_dbId,
  from: {$in: froms}
})

或者只是:

EQBook.find({
  eq_dbId: req.body.eq_dbId,
  from: {$in: periods.map(val => val.from)}
})

答案 1 :(得分:0)

仅创建一个'from'值的数组

periodFrom = periods.map((elem)=>elem.from);

EQBook.find(
  {eq_dbId: req.body.eq_dbId,from:{$in:periodFrom}}
)

答案 2 :(得分:0)

您可以尝试一下。

const ObjectId = require('mongodb').ObjectId;
let froms = periods.map(data => data.from);
EQBook.aggregate([
{
 $match : {'eq_dbId': ObjectId(req.body.eq_dbId),'from':{$in:[periodFrom]}
}
])