如果我想通过id获取一个只是文档中数组的子文档,我需要如何调用它?我有这些模型
/* Build */
var buildSchema = new Schema({
buildName: String,
package: [packageSchema],
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
}
})
var Build = mongoose.model('build', buildSchema)
/* Project */
var projectSchema = new Schema({
projectName: String,
build: [buildSchema],
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
}
})
var Project = mongoose.model('project', projectSchema)
我的获取功能和路线是这样的:
router.get('/build/:id', function (req, res, next) {
var token = helperJwt.decodeToken(req)
jwt.verify(token, helperJwt.secret, function (error, decoded) {
if (error) {
res.status(401)
} else {
Project.findOne({ _id: req.params.id}, 'build', function (err, build) {
if (err) {
res.status(401)
} else {
build.findOne({build: build._id}, 'postedBy', 'email', function (err, getBuild) {
if (err) {
res.status(401)
} else {
return status(200).json(build)
}
})
}
})
}
})
})
这是好的,或者我怎么能只获得一个构建?
我正在使用vue作为前端,但它不能只识别一个构建数据。
我不知道如何找到一个子文档。
我想带点像:
{
"_id" : ObjectId("5a26fbfd1866893baf14b175"),
"postedBy" : "5a2021539f1d222bfc915fa2",
"projectName" : "El pipiripau",
"build" : [
{
"buildName" : "bdfbdgf",
"postedBy" : ObjectId("5a2021539f1d222bfc915fa2"),
"_id" : ObjectId("5a26fc0dbe4de0039cdae0c7"),
"package" : []
},
}
答案 0 :(得分:0)
如果您在 projectSchema 中使用 buildSchema ,则构建数组将包含子文档,因此它们不会有ID。
您可以在构建架构中设置自定义ID字段,然后在查询中引用该字段,但在保存项目文档时必须注意设置这些ID。
或者,如果您的构建文档存储在单独的集合中(因为您有构建模型),那么它们将具有 _id 字段,您可以在 projectSchema 中存储对构建模型的引用数组:
var projectSchema = new Schema({
projectName: String,
build: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'build'
}],
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
}
})
然后,假设 req.params.id 是构建文档的ID,您可以找到构建数组所具有的项目id,然后使用填充将构建 ID数组替换为相应的子文档:
Project
.find({ build: req.params.id })
.populate('build')
.exec(function (err, projects) {
if (err) {
// Handle error
} else {
// For each project, filter builds for just the one matching the id param
projects.forEach(project => {
project.build = project.build.filter(item => item._id == req.params.id )
})
// Handle result
}
})
以下是有关人口的文件: http://mongoosejs.com/docs/populate.html
我希望这会有所帮助。