node.js - Mongoose/MongoDb 在数组中查找具有反向引用的文档
问题描述
我有 2 个模式:
Order
- orderId
- date
- items: OrderItem[] (Array of ObjectIds of OrderItem)
OrderItem
- name
- price
- discount
现在我有了订单项目列表,我想将它们与订单相关联。因为我将引用存储在Order
.
但我需要OrderItems
在一个单独的页面中列出所有内容,我可以在其中通过 API 将项目链接到订单。因此,我需要查看哪些商品已经与订单相关联,哪些商品仍处于待处理状态。有没有办法使用猫鼬获得OrderId
列表?OrderItem
我也尝试通过在架构中OrderItem
包含来反向引用。但是,当我尝试链接已经链接的订单项目时,它会导致问题。orderId
OrderItem
例如,我有 2 个订单:
o1:
items: i1, i2
o2:
items: i3, i4, i5
i1:
orderId: o1
i2:
orderId: o1
i3:
orderId: o2
i4:
orderId: o2
i5:
orderId: o2
i6:
orderId: o2
因此,从项目列表中,用户选择 i2、i3 以链接到 o3。然后必须进行以下更新:
o3 -> items: i2, i3
i2 -> orderId: o3
i3 -> orderId: o3
但它留下了一个o1
仍然成立i2
并且o2
仍然成立的情况i3
。这些文件也需要更新。这些许多操作留下了一个问题,简单的链接会导致复杂的模棱两可的情况。
如果有一种方法我可以获得项目列表并且orderId
它属于而不存储并且仅将其存储在orderId
可以解决这种情况。OrderItem
Order.items
有什么办法可以用 mongoose / mongodb 实现这一点?
解决方案
当从 orderItem 检索订单详细信息时,存储没有 orderId 的 orderItem 会导致您遇到问题。如您所想,将 orderItemId 存储在订单集合中并没有用。因为您可以从 orderItem 集合中获取它们。查询嵌套数据并不容易。尝试将它们全部排成一条线。只是我的观点。
Order
- salerId
- buyerId
- date
OrderItem
- orderId
- name
- price
- discount
推荐阅读
- python - Python:连接到连接在 wifi 中继器(WiFi NAT 路由器)上的设备的 IP
- angular - 如何在 Angular 中获取 Syncfusion 网格的组件
- python - 代码给了我一个无限递归错误
- android - android webview http 网站意图
- c# - c# - 为什么我无法访问 Winform 中的组合框?
- git - 如何使用`git submodules`通过分支跟踪超级项目
- ruby - 使用 Webmock 存根法拉第请求 - 需要帮助
- ios - Flutter:Apple 拒绝了我的应用程序,因为“在不使用 APN API 的情况下推送通知”
- python - 不包含值的 HTML 属性
- hive - 无法在 hive 或 Presto 中查询具有特殊字符的数据