Mongoose 从其他 collection 中发现价值

Mongoose find value from other collection

这是我的模型:

var RaceSchema = new mongoose.Schema({
    name: {
        type: String
    },
    owner:{
        type: mongoose.Schema.ObjectId, ref:"user"
    }
});
var UserSchema = new mongoose.Schema({
    username: { 
        type: String
    }
});

这是我的例子 collections:

//Races
{
    "_id": {
        "$oid": "5b5740c54befec2594ce4cb0"
    },
    "name": "Race1"
    "owner": {
        "$oid": "5b34f870e1eef640f8cb43e4"
    }
}
//User
{
    "_id": {
        "$oid": "5b34f870e1eef640f8cb43e4"
    },
    "username":"admin"
}

我想查找所有者与字段 用户名 匹配的种族。我是说: “我想找到所有者是 admin”的种族

我正在尝试:

Race.find().populate('users', {username: 'admin'}).exec(function (err, races) {
    ....
}

但结果总是一样的,搜索给我所有种族。

编辑 1

SQL 句子为:

Select * FROM Races,Users WHERE owner=user._id AND user.username='admin' 

或类似的东西

一旦你得到所有的种族,使用数组方法过滤器

示例:

let adminRaces = races.filter(x=>x.owner['$oid'] === admin._id['$oid'])

参考文献:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

要从两个不同的集合中获取数据,您需要使用 aggregate 函数和 $lookup (see the docs)

您可以在 mongoose 中找到它的等价物 ()

我终于做到了。解决方案:

这是我的代码:

var query=[{
        "$lookup": {
            "from": "users",
            "localField": "owner",
            "foreignField": "_id",
            "as": "user"
        }
    },{
        "$unwind": "$user"
    },{
        "$match": {
            "$and": [{
                "user.username": username
            }]
        }
    }];
Race.aggregate(query, function (err, races){
    ....
}