如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?
How to add multiple ObjectIds using addToSet with Mongoose?
我正在尝试使用 mongoose addToSet 将多个 ObjectId 添加到子文档数组。我使用了类似的方法来添加单个子文档,但我正在尝试弄清楚如何添加多个子文档。
项目模型
import mongoose from 'mongoose';
var Schema = mongoose.Schema;
const ProjectSchema = new Schema({
title: {
type: String
},
files: [{
type: Schema.ObjectId,
ref: 'File'
}]
});
export default mongoose.model('Project', ProjectSchema);
文件模型
import mongoose from 'mongoose';
var Schema = mongoose.Schema;
const FileSchema = new Schema({
fileUrl: {
type: String
},
date: {
type: Date
}
});
export default mongoose.model('File', FileSchema);
控制器
Project.create({fileUrl: req.fileUrl}, (err, proj) => {
if (err) {
console.log(err);
return res.status(400).send(err);
} else {
File.distinct('_id', {date: {"$lt": req.date }}).exec((err, files) => {
if (err)
return (err)
var added = new File([files]) <-----THE PROBLEM
proj.files.addToSet(added)
proj.save()
return res.status(200).send('OK');
})
}
});
//通常我会做这样的事情如果我要添加一个子文档到一个数组:
(示例)
var foo = new File(file)
proj.files.addToSet(foo)
proj.save()
你很亲近!当您传递添加的变量时,您不会发送值列表。您基本上是在发送单个数组对象。
如果您想执行 addToSet 函数,请尝试进行简单的迭代:
files.forEach(function(f) {
var added = new File(f)
proj.files.addToSet(added);
proj.save(function(err, saved){
if (err)
throw (err)
return;
})
});
您可以在此处找到 javascript 迭代器的更多示例:For-each over an array in JavaScript? 这里有一个令人惊奇且全面的选项列表。
我正在尝试使用 mongoose addToSet 将多个 ObjectId 添加到子文档数组。我使用了类似的方法来添加单个子文档,但我正在尝试弄清楚如何添加多个子文档。
项目模型
import mongoose from 'mongoose';
var Schema = mongoose.Schema;
const ProjectSchema = new Schema({
title: {
type: String
},
files: [{
type: Schema.ObjectId,
ref: 'File'
}]
});
export default mongoose.model('Project', ProjectSchema);
文件模型
import mongoose from 'mongoose';
var Schema = mongoose.Schema;
const FileSchema = new Schema({
fileUrl: {
type: String
},
date: {
type: Date
}
});
export default mongoose.model('File', FileSchema);
控制器
Project.create({fileUrl: req.fileUrl}, (err, proj) => {
if (err) {
console.log(err);
return res.status(400).send(err);
} else {
File.distinct('_id', {date: {"$lt": req.date }}).exec((err, files) => {
if (err)
return (err)
var added = new File([files]) <-----THE PROBLEM
proj.files.addToSet(added)
proj.save()
return res.status(200).send('OK');
})
}
});
//通常我会做这样的事情如果我要添加一个子文档到一个数组: (示例)
var foo = new File(file)
proj.files.addToSet(foo)
proj.save()
你很亲近!当您传递添加的变量时,您不会发送值列表。您基本上是在发送单个数组对象。
如果您想执行 addToSet 函数,请尝试进行简单的迭代:
files.forEach(function(f) {
var added = new File(f)
proj.files.addToSet(added);
proj.save(function(err, saved){
if (err)
throw (err)
return;
})
});
您可以在此处找到 javascript 迭代器的更多示例:For-each over an array in JavaScript? 这里有一个令人惊奇且全面的选项列表。