收藏夹嵌套在猫鼬

问题描述:

我有一个收藏关联问题。
我花了2天,仍然没有解决问题,这对我来说是新的。
收藏夹嵌套在猫鼬

我的模型:

// Schema opened cases 
const openedSchema = new Schema({ 
    user: { 
    type: Schema.Types.ObjectId, 
    ref: 'user', 
    required: [true, 'user is required'], 
    index: true 
    }, 
    weapon: { 
    type: Schema.Types.ObjectId, 
    ref: 'cases.weapons', 
    required: [true, 'weapon is required'], 
    index: true 
    }, 
    sellPrice: { 
    type: Number, 
    default: null 
    }, 
    status: { 
    type: Number, 
    default: 0 
    } 
}, { 
    timestamps: true 
}); 

const opened = mongoose.model('opened', openedSchema); 

// list cases 
const casesSchema = new Schema({ 
    name: { 
    type: String, 
    unique: true, 
    required: [true, 'name is required'] 
    }, 
    price: { 
    type: Number, 
    required: [true, 'price is required'] 
    }, 
    weapons: [ { 
    weapon: { 
     type: Schema.Types.ObjectId, 
     ref: 'weapon', 
     index: true 
    } 
    } ] 
}, { 
    timestamps: false 
}); 

const cases = mongoose.model('cases', casesSchema); 

// list weapons 

const weaponSchema = new Schema({ 
    name: { 
    type: String, 
    unique: true, 
    required: [true, 'name is required'] 
    }, 
    price: { 
    type: Number, 
    required: [true, 'price is required'] 
    }, 
    autoship: { 
    count: Number, 
    status: Boolean, 
    price: Number 
    } 
}, { 
    timestamps: false 
}); 

const weapon = mongoose.model('weapon', weaponSchema); 

这文件是什么样子

// cases 
{ 
    "_id": { 
     "$oid": "59653bcfa9ac622e1913e10c" 
    }, 
    "name": "test case #1", 
    "price": 256, 
    "weapons": [ 
     { 
      "weapon": { 
       "$oid": "59653bcfa9ac622e1913e10b" 
      }, 
      "_id": { 
       "$oid": "59653bcfa9ac622e1913e10d" 
      } 
     }, 
     { 
      "_id": { 
       "$oid": "59653d3279aeda2fda9fb490" 
      }, 
      "weapon": { 
       "$oid": "59653c5d069f562eb0ba4ef3" 
      } 
     }, 
     { 
      "_id": { 
       "$oid": "59653d38ba04de2fdddc459f" 
      }, 
      "weapon": { 
       "$oid": "59653c893a772e2ef7b65a29" 
      } 
     } 
    ], 
    "__v": 0 
} 
// opened 
{ 
    "_id": { 
     "$oid": "5965d134c8c95972a1a498f5" 
    }, 
    "updatedAt": { 
     "$date": "2017-07-12T07:35:16.419Z" 
    }, 
    "createdAt": { 
     "$date": "2017-07-12T07:35:16.419Z" 
    }, 
    "user": { 
     "$oid": "5965d0d6ea9db872360db98b" 
    }, 
    "weapon": { 
     "$oid": "59653bcfa9ac622e1913e10d" 
    }, 
    "status": 0, 
    "sellPrice": null, 
    "__v": 0 
} 
// weapon 
{ 
    "_id": { 
     "$oid": "59653bcfa9ac622e1913e10b" 
    }, 
    "name": "AWP | Fever Dream", 
    "price": 300, 
    "autoship": { 
     "status": true, 
     "price": 167, 
     "count": 5 
    }, 
    "__v": 0 
} 

我需要的开宗武器数据的列表。
打开 - >经典案例 - >武器
所以,我这样做:

opened.find() 
.populate('cases.weapons') 
    .then(_opened => { 
     console.log(_opened); 
    }) 
    .catch(err => { 
     logger.error(err); 
    }); 

populate不起作用。

除非我误会,openedSchemacasesSchema之间没有关系。

这不是opened -> cases -> weaponopened -> weaponopenedSchema没有现场叫cases - 这意味着cases将永远不会被填充。

根据您的架构定义,它应该是opened.find().populate('weapon')

+0

每个案例都有一个武器列表和它的id为'populate'。 'opens.weapon'的'cases.weapons._id'和'weapon'的'cases.weapons.weapon._id'。这我想实现。如果我在某个地方犯了错,我请求你纠正我的方案 –