【发布时间】:2015-02-01 18:48:10
【问题描述】:
我们使用 MongoDB 已有一段时间了,但有一件事我无法理解。假设我有一个用户集合,这些用户具有这样的观察列表或收藏项目列表:
usersCollection = [
{
_id: 1,
name: "Rob",
itemWatchList:[
"111111",
"222222",
"333333"
]
}
];
和一个单独的项目集合
itemsCollection = [
{
_id:"111111",
name: "Laptop",
price:1000.00
},
{
_id:"222222",
name: "Bike",
price:123.00
},
{
_id:"333333",
name: "House",
price:500000.00
}
];
显然我们不想在 itemWatchList 数组中插入整个项目 obj,因为项目数据可能会改变,即价格。
假设我们将该用户拉到 GUI 并希望显示用户 itemWatchList 的网格。我们不能,因为我们只有一个 ID 列表。是做第二个 collection.find([itemWatchList]) 然后在结果回调中操纵用户记录以显示当前项目的唯一选择吗?问题在于,如果我返回一个由多个用户组成的数组,每个用户都带有一个 itemWatchList 的数组,那将是一个回调噩梦,试图保持结果直截了当。我知道 Map Reduce 或 Aggregation 框架无法遍历多个集合。
这里的最佳做法是什么?是否应该使用更好的数据结构来避免这个问题?
【问题讨论】:
-
您当前的结构是理想的。您需要使用像猫鼬这样提供参考解析功能的模块。 -mongoosejs.com/docs/populate.html。 NodeJS 原生驱动 - 你需要自己做两个查询。