MongoDB - 查询难题 - 文档引用或子文档

jor*_*dan 10 javascript mongoose mongodb node.js odm

我在MongoDB中存储的一些数据遇到了一些问题(注意:我使用的是mongoose作为ODM).我有两个模式:

mongoose.model('Buyer',{
  credit: Number,
})
Run Code Online (Sandbox Code Playgroud)

mongoose.model('Item',{
  bid: Number,
  location: { type: [Number], index: '2d' }
})
Run Code Online (Sandbox Code Playgroud)

买方/物品将具有父母/子女协会,具有一对多的关系.我知道我可以将Items作为嵌入的subdocs设置到Buyer文档,或者我可以创建两个单独的文档,其中对象id引用彼此.

我现在面临的问题是,我需要查询的项目它的出价比买方的信用较低,而且这里位置附近一定地理坐标.

为了满足第一个标准,似乎我应该将Items作为一个子目录嵌入,以便我可以比较这两个数字.但是,为了将位置与geoNear查询进行比较,似乎最好将文档分开,否则,我无法在每个子文档上执行geoNear.

有什么方法可以对这些数据执行这两项任务吗?如果是这样,我应该如何构建我的数据?如果没有,有没有办法可以执行一个查询,然后对第一个查询的结果进行第二次查询?

谢谢你的帮助!

Noc*_*rno 3

在 mongodb 中存储层次结构还有另一种选择(除了嵌入和规范化之外),即将它们存储为树结构。在这种情况下,您可以将买家和项目存储在单独的文档中,但位于同一集合中。每个项目文档都需要一个指向其买方(父)文档的字段,并且每个买方文档的父字段将设置为空。我链接的文档解释了您可以选择的几种实现。