使用 Node.js 将数组插入 MongoDB 子文档
Posted
技术标签:
【中文标题】使用 Node.js 将数组插入 MongoDB 子文档【英文标题】:Insert array into MongoDB subdocument with Node.js 【发布时间】:2017-09-14 16:40:11 【问题描述】:我目前有一个如下所示的架构:
positionsApplied:[
position_id:String,
index_position: Number
],
我还有 3 个对象需要插入到我的数据库中:
如何通过 Ajax 调用将这些插入到我的数据库中?到目前为止我尝试过的:
像这样将数据添加到数组中:
["58d6b7e11e793c9a506ffe8f", 0, "58c2871414cd3d209abf4fc1", 1, "58d6b7e11e793c9a506ffe7f", 1]
然后哪个会像这样通过我的 ajax 调用传递?(不确定)
$.ajax(
url: "/insertPositionIndex",
type: "POST",
dataType: "json",
data:
newarray
,
success: function (data)
console.log(data);
)
插入数据库是我卡住的地方,我如何分解数组以便插入它?
app.post('/insertPositionIndex', function(req, res)
var object = req.body.ordered_divs;
console.log(req.body);
User.update(
"_id": req.user._id,
"$push":
"positionsApplied":
// unsure what to do here?
).exec(function (err, result)
console.log(result);
res.send( results: result );
);
);
非常感谢任何帮助! * 注意schema中的position_id字段是数组中的div_id,index-position字段也是数组中的index_pos。
用户架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var User = new Schema(
id: String,
name: String,
companyname: String,
password: String,
email: String,
username: String,
location: String,
role:String,
teamwork:Number,
initiative:Number,
technical_skills: Number,
communication:Number,
employees: String,
profile_image: String,
biodescription: String,
twitter: String,
facebook: String,
instagram: String,
linkedin: String,
biodescription: String,
positionsApplied:[
position_id:String,
index_position: Number
],
experience: [
title: String,
location: String,
company: String,
start: String,
end:String,
description:String
],
position: [
_id:String,
title: String,
location: String,
start: String,
term:Number,
description:String,
date: type: Date, default: Date.now,
applied:[
candidate_id: String,
profile_image: String,
location: String,
name: String,
_id:String
],
],
education: [
school: String,
location: String,
degree: String,
start: String,
end:String,
description:String,
_id:String
],
images: [
one: String,
two: String,
three: String,
four: String,
five:String,
six:String
],
);
module.exports = mongoose.model('User', User);
【问题讨论】:
【参考方案1】:由于您的 Schema 是一个对象数组,而您获取的数据(根据浏览器的控制台)也是一个对象数组,为什么不直接传递该数组本身(在控制台中的那个)浏览器)通过ajax并使用mongodb的$each
$push
保存到数据库中。
$.ajax(
url: "/insertPositionIndex",
type: "POST",
dataType: "json",
data:
arrayOfObjects
,
success: function (data)
console.log(data);
)
app.post('/insertPositionIndex', function(req, res)
var object = req.body.ordered_divs;
console.log(req.body);
User.update(
"_id": req.user._id,
"$push":
"positionsApplied":
$each: req.body.arrayOfObjects
).exec(function (err, result)
console.log(result);
res.send( results: result );
);
);
您必须更改 arrayOfObjects
键以匹配您的架构 positionsApplied
键。
【讨论】:
由于某种原因,我得到了“Unexpected token :”并且它引用了“$each: object”行,我错过了什么吗? 谢谢!当我运行它时,我得到了一个完全空白的对象,但是在控制台中我得到了--->“UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 1): MongoError: The argument to $each in $push must是一个数组,但它的类型为 NULL"arrayOfObjects
是否进入您的发布路线?检查console.log(req.body.arrayOfObjects)
中的内容。是NULL吗?
position_id 都是用户集合中子文档的一部分,我已更新问题以显示我的用户架构。当我在控制台中登录时,我会取回 position_id 所属的整个文档..所以我基本上会取回 3 个用户,因为我有 3 个文档。
但是我上面贴的错误信息在日志的最后还在!以上是关于使用 Node.js 将数组插入 MongoDB 子文档的主要内容,如果未能解决你的问题,请参考以下文章
从 Node.js 向 MongoDB 集合插入不同类型的值
无法使用 mongoose、Node.js 将数据插入到 mongoDB 中的 Document 字段中
无法使用 Node.js 和 Mongoose 插入 MongoDB