什么是使用猫鼬人口的正确方法?

时间:2017-01-09 16:16:14

标签: node.js mongodb mongoose

我有两个架构设置:

var ClientSchema = new Schema({
  name: String
});
module.exports = mongoose.model('Client', ClientSchema);

var PlaceSchema = new Schema({
  client: {type: mongoose.Schema.Types.ObjectId, ref: 'Client'},
  address: String
});
module.exports = mongoose.model('Place', PlaceSchema);

如果我得到一个地方列表,我可以像这样容易地填充客户端:

Place.find({}).populate('client')

但是,如果我想获得所有客户及其所有地点的列表,我将如何进行查询?我应该简单地遍历所有客户端并在返回响应之前使用Place.find({client:client._id)找到它的位置吗?

2 个答案:

答案 0 :(得分:0)

此数据结构只能以一种方式工作,PlaceSchema确实引用ClientSchema,但ClientSchema没有对PlaceSchema的任何引用,解决方案是以这种方式定义ClientSchema:

var ClientSchema = new Schema({
    name: String,
    _address: [{type: mongoose.Schema.Types.ObjectId, ref: 'Place'}]
});

看起来有点愚蠢,但对你的案子来说会容易得多

答案 1 :(得分:0)

如果你有很多地方,他们将拥有自己独特的ID,并且对于客户端所连接的每个地方,你都可以拥有一个placeId数组,每次客户端连接时你都可以将placeId推送到这个数组到这个地方。

var ClientSchema = new Schema({
    name: String,
    _address: [{type: mongoose.Schema.Types.ObjectId, ref: 'Place'}]
});`