Mongoose为同一个集合组合了两个查询

时间:2018-02-22 21:04:06

标签: javascript node.js mongodb mongoose

我正在尝试根据下面相同集合中的其他文档进行查询以查找文档。

第一个找到用户,第二个通过使用收到的用户数据查找数据。但是我想用一个像SQL中的join这样的查询来做这件事

这是架构

var ConnectionSchema = new Schema({
socketId: {
    type: String,
    require: true
},
location: {
    type: [Number],
    index: '2dsphere'
},
user: { type: Schema.ObjectId, ref: "User" },
date: {
    type: Date,
    require: true,
    default: new Date()
}

});

//查询

return mongoose.model("Connection").findOne({ user: userId }).populate("user").then(usr => {
    return mongoose.model("Connection").find({
        location: {
            $near: {
                $maxDistance: config.searchDistance,
                $geometry: { type: Number, coordinates: usr.location }
            }
        },
        user: { $ne: userId },
    });
});

有没有办法用一个单一的查询来做到这一点? 感谢。

1 个答案:

答案 0 :(得分:2)

是的,你可以这样做吗

    return mongoose.model("Connection").findOne({ user: userId })
.populate("user" ,
        match : {$and : [{location: {
            $near: {
                $maxDistance: config.searchDistance,
                $geometry: { type: Number, coordinates: usr.location }
            }
          }},
           {user: { $ne: userId }}]})
        .then(usr => {
        // perform your action
    });