Javascript 将mongoose数组值连接到唯一ID
这似乎是一个模糊的问题,但我会尽我所能解释清楚。顺便说一句,我对使用猫鼬很陌生:) 我有一个mongoose模式,为每个用户存储不同的值,就像这样Javascript 将mongoose数组值连接到唯一ID,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,这似乎是一个模糊的问题,但我会尽我所能解释清楚。顺便说一句,我对使用猫鼬很陌生:) 我有一个mongoose模式,为每个用户存储不同的值,就像这样 let userSchema = mongoose.Schema({ user: { type: String, required: true, unique: true }, pass: { type: String, required: true }, files: [{ type: String, required: f
let userSchema = mongoose.Schema({
user: { type: String, required: true, unique: true },
pass: { type: String, required: true },
files: [{ type: String, required: false }],
});
“files”-键包含一个值数组,例如:
userSchema.files = [value1, value2, value3]
我希望每个值都连接到某种ID,这样当我调用指定的ID时,我就得到了指定的值。仅出于演示目的,它可以如下所示:
userSchema.files = [{value:value1, id: id1},
{value:value2, id: id2},
{value:value3, id: id3}]
然后我想找到指定的id,并在请求中返回它的“值”-键:
router.route("/home/:id")
.get(restrict, function(req, res) {
User.findOne({ user: req.session.Auth.username }, function(error, data) {
data.files.forEach(function(file) {
if (file.id === req.params.id) {
response.render("../home", file.value)
}
}
});
});
我该怎么做?尝试将对象推送到文件,但未按预期工作。读了一些关于ObjectId的东西,但不能完全理解它有什么提示吗?我认为您只需要为文件创建一个单独的模型,并使用“ref”关键字将其连接到您的用户模型:
let fileSchema = mongoose.Schema({
_id : Number,
value : String
});
let userSchema = mongoose.Schema({
user: { type: String, required: true, unique: true },
pass: { type: String, required: true },
files: [{ type: Number, ref: 'File' }]
});
let User = mongoose.model('User', userSchema);
let File = mongoose.model('File', fileSchema);
let f1 = new File({ _id: 1, value: 'File 1'});
let f2 = new File({ _id: 2, value: 'File 2'});
let f3 = new File({ _id: 3, value: 'File 3'});
let user1 = new User({user:'chuck', pass:'norris'});
user1.files.push(f1);
user1.files.push(f2);
user1.files.push(f3);
user1.save(function(err){ });
现在要恢复数据,请执行以下操作:
User
.findOne({ user: 'chuck' })
.populate('files') // only works if we pushed refs to children
.exec(function (err, user) {
if (err) return handleError(err);
console.log(user);
//you can now loop through user.files and compare _id
user.files.forEach(function(file) {
if (file._id === req.params.id) {
response.render("../home", file.value)
}
}
});
您可以在此处阅读有关猫鼬参考种群的信息:您是否正确获取了
数据?您在插入或检索时遇到问题吗?@RaR我在插入时遇到问题!你试过什么?插入代码在哪里?@RaR。我使用.findOne找到了指定的用户,在回调函数中我刚刚键入user.files={value:req.body.value,id:123}。db然后将每个值分别保存在一个数组中,如:[“req.body.value”,“123”]您可以这样尝试吗谢谢,我在您回答之前就这样做了,现在它工作得很好。更好的设计:)