【问题标题】:How to find only one obj in array by multiple conditions mongoose如何通过多个条件猫鼬在数组中仅找到一个obj
【发布时间】:2018-09-07 03:41:19
【问题描述】:

我在集合中有许多文档。每个文档都有houseNumber参数和items数组。

我需要通过houseNumber 找到正确的文档,然后通过sku 属性在 items 数组中找到正确的 obj。 这是我的表现:

StockLimitation.find({houseNumber: 2, 'items': {
    $elemMatch : { sku: 'YO-FA-01256-00' }
  }}, (err, data) => {
    if (err) console.log(err)
      console.log(data)
});

问题是整个项目数组是从实际文档返回的,但我只需要一个匹配的对象。有解决办法吗?

更新
可能这里有一个解决方案:Retrieve only the queried element in an object array in MongoDB collection

但是它只返回数组元素,我想要带有其他文档参数的结果,例如houseNumbername。怎么做?

【问题讨论】:

标签: javascript database mongodb mongoose


【解决方案1】:

示例展示:

db.test.aggregate([
{$match: {'houseNumber': '125'}},
{$project: {
    shapes: {$filter: {
        input: '$items',
        as: 'item',
        cond: {$eq: ['$$item.sku', 'XYZ']}
    }},
    _id: 0, //0 means do not show the field
    houseNumber:1,
    number:1
 }}
])

【讨论】:

  • 工作,谢谢!但我不明白为什么它不能这样工作:StockLimitation.findOne({houseNumber: 2}, {items: {$elemMatch: {sku: 'YO-FA-01256-00'}}}, (err,data) => { if (err) console.log(err) console.log(data); });
  • 可能与猫鼬有关。如果你使用命令行执行查询,你会得到什么?
  • $elemMatch 也是一个投影运算符。所以它限制了输出docs.mongodb.com/manual/reference/operator/projection/elemMatch
猜你喜欢
  • 2014-03-10
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 2020-04-11
  • 2021-10-17
  • 1970-01-01
  • 2016-03-31
  • 2021-08-05
相关资源
最近更新 更多