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){
....
}
这是我的模型:
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){
....
}