是否有任何查询通过检查mongoDb中嵌套的嵌入式文档的字段来查找文档

瓦尔·沙菲克(Waleed Shafiq)

这是我的产品架构。

const Products: Schema = new Schema({
storeId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'store',
    required: true
},
invoiceId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'invoice'
},
unitPrice: { type: Number },
quantity: { type: Number },

}, { timestamps: true });

这是我的Invocie模式

const invoice: Schema = new Schema({
customer: { type: String, default: null },

netTotal: { type: Number },
paid: { type: Number },
type: { type: String },

}, { timestamps: true });

我想查找invoiceId文档中键入“ sale”的产品。因为invoiceId是包含发票明细的产品文档中的嵌入式文档。

我试过填充,但没有用。

Products.find().populate({path : "invoiceId" , match : {type : "sale"} });

但是它不起作用,只是给所有文档填充“销售”中的invoiceId。

任何帮助将不胜感激。

阿努·潘乔利(Anuj Pancholi)

免责声明:我还没有使用过Mongoose,但是您在评论中说mongodb查询也将有所帮助。

基于您描述的猫鼬模式,我使用Mockeroo(https://mockaroo.com/模拟了10个产品文档和3个发票文档请注意,这里将objectIds用作整数,但是只要所有id都是objectIds,查询就应该起作用。

产品

{
  "_id": 1,
  "storeId": 1,
  "invoiceId": 3,
  "unitPrice": 127,
  "quantity": 21,
  "timestamp": "1558330027"
},
{
  "_id": 2,
  "storeId": 2,
  "invoiceId": 2,
  "unitPrice": 140,
  "quantity": 25,
  "timestamp": "1552293229"
},
{
  "_id": 3,
  "storeId": 1,
  "invoiceId": 2,
  "unitPrice": 192,
  "quantity": 80,
  "timestamp": "1576270154"
}, //and so on...

发票

{
  "_id": 1,
  "customer": "Y-find",
  "netTotal": 1,
  "paid": true,
  "type": "stale"
},
{
  "_id": 2,
  "customer": "Namfix",
  "netTotal": 72,
  "paid": true,
  "type": "sale"
},
{
  "_id": 3,
  "customer": "Opela",
  "netTotal": 67,
  "paid": false,
  "type": "fail"
}

由于每个产品都存储一个发票编号,因此产品发票是多对一关系(因为许多产品可能具有相同的发票编号,因此属于同一张发票,但是,我们并未在发票中存储任何具体的产品参考,并且每个产品只有一个invoiceId,因此,一个产品必须仅属于一个发票)。

我们的目标是编写查询以获取发票类型为“ sale”的所有产品。为此,我编写了以下汇总:

db.products.aggregate([
{
    $lookup: {
        "from": "invoices",
        "let": {
            inv_id: "$invoiceId"
        },
        "pipeline": [
        {
            $match: {
                $expr: {
                    $eq: [
                        "$$inv_id",
                        "$_id"
                    ]
                }
            }
        }
        ],
        as: "invoice"
    }
  },
  {
      $unwind: {
          path: "$invoice"
      }
  },
  {
      $match: {
        "invoice.type": "sale"
      }
  },
  {
      $unset: "invoice"
  }
])

我将模拟数据放入Mongoplayground并进行了尝试,这里是:https ://mongoplayground.net/p/K8ciQ-Ei12P

请注意,最后一个$ unset阶段仅是要确保结果中的所有文档都是没有发票明细的产品文档(因为这是必需的)。

希望能有所帮助。如果有人指出要进行任何优化,或者可以将其转换为Mongoose,请放心。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从mongoDB中的手动参考中查找所有嵌入式文档

无法从MongoDB解码嵌入式文档(嵌套)

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

将嵌入式文档插入到mongodb文档中的新字段

Mongo查询嵌入式文档中的动态字段

mongodb聚合中的项目嵌套嵌入式文档

基于范围查询MongoDB中嵌入式文档的数组

从嵌入式文档中删除字段

MongoDB查询以查找多个嵌入式文档

在MongoDB中排除嵌入式文档中除单个字段之外的所有字段

mongodb通过检查具有ID的文档来添加字段

查询Spring Data MongoDB中嵌入式文档的数组

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

MongoDB聚合:通过动态字段路径从嵌入式文档添加字段

查找数组中是否存在嵌入式文档,并获取父文档的属性值

Mongo嵌入式文档字段查询

如何在嵌入式数组mongodb中查询嵌入式文档

使用Presto查询MongoDB嵌入式/嵌套文档的数组

在mongodb中更新嵌套的嵌入式文档

Mongoid嵌套嵌入式文档保存忽略查询

MongoDB嵌入式文档自我查询

如何在MongoDB中的嵌入式文档中获得同一级别的所有字段

查询MongoDB中的嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

在mongodb中展开嵌入式文档

是否可以查询嵌入式文档?

mongodb是否会在嵌入式文档的_id字段上自动创建索引?

如何在 MongoDb 中查询嵌入式文档?

Mongodb node.js 查询嵌入式文档具有多个值的单个字段。

TOP 榜单

热门标签

归档