将JSON对象推入Mongoose数组
Push JSON Object into Mongoose Array
我对Mongoose相当陌生。我的目标是能够将数据推送到Mongoose数组中,这样我就可以在以后循环使用它:这是我的模式:
var moduleSchema = new mongoose.Schema({
name: {type: String, index: {unique: true}},
priority: Number,
author: String,
enabled: Boolean,
keywords: [{keyword: String}],
code: String
});
我希望能够将这种格式的JavaScript对象发送到express,并插入它自己的"关键字"字段。理想情况下,输出应该是这样的:
{
"_id": "56401885bff833582442bb5f",
"name": "ModName",
"priority": 1,
"author": "tscrip",
"enabled": true,
"code": "TEST",
"__v": 0,
"keywords": [
{
"keyword": "Dog",
"keyword": "Cat"
}
]
}
每次我输入数据来更新这个,我要么得到:
0:D,
1:O,
2:G
或者我得到:
The argument to $each in $push must be an array but it was of type Object
这是我更新模型的代码:
if(req.body.keywords) updateObj.keywords = JSON.parse(req.body.keywords);
var keywordsArr = updateObj.keywords;
Module.findByIdAndUpdate({
"_id": req.params.id
},
{ $set: {keywords: { $each: { keyword: {keywordsArr}}}}},
function(err, numAffected){
console.log(err);
}
);
我给它发送了一个简单的JSON对象来更新:
{
"keywords": [
"mouse",
"bird"
]
}
如有任何帮助,我们将不胜感激。
更新1
我试着把它做成一个数组:
var moduleSchema = new mongoose.Schema({
name: {type: String, index: {unique: true}},
priority: Number,
author: String,
enabled: Boolean,
keywords: [String],
code: String
});
并更新如下:
if(req.body.keywords) updateObj.keywords = JSON.parse(req.body.keywords);
var keywordsArr = updateObj.keywords.keywords;
console.log(keywordsArr);
Module.findByIdAndUpdate({
"_id": req.params.id
},
{ $push: {keywords: {$each: keywordsArr}}},
function(err, numAffected){
console.log(err);
}
);
但我现在得到一个错误:
{ [MongoError: exception: The field 'keywords' must be an array but is of type Object in document {_id: ObjectId('56401885bff833582442bb5f')}]
name: 'MongoError',
message: 'exception: The field ''keywords'' must be an array but is of type Object in document {_id: ObjectId(''56401885bff833582442bb5f'')}'
将对象推送到数组Mongoose:
我的MongoDB或Mongoose模式如下:
{
"_id": {
"$oid": "5511241323214"
},
"target": "200",
"region": "United Kingdom",
"fullname": "John Smith",
"milesLog": [
{
"miles": "1",
"activity": "Walking",
"month": "Apirl 2015",
"_id": {
"$oid": "5527d"
},
"date": {
"$date": "2015-04-10T13:53:43.549Z"
}
},
{
"month": "March 2015",
"activity": "Walking",
"miles": "1",
"_id": {
"$oid": "5527d9"
},
"date": {
"$date": "2015-04-10T14:07:37.004Z"
}
}
]
"__v": 0
}
下面是我用来将数据推入数组的代码。Mongoose带有一个内置的"findByIdAndUpdate"函数
app.put('/user/:id', function(req, res) {
// Using mongoose in-built function "findbyID"
User.findById(req.params.id, function(err, provider) {
// If error show.
if (err)
{
res.send(err);
}
// Using mongoose "findbyIDandUpdate" fucntion to "PUT" data into the array
User.findByIdAndUpdate(
provider.id,
{$push: {"milesLog":
{
// Passing Data
miles: req.body.miles,
activity: req.body.activity,
month: req.body.month
}}},
{safe: true, upsert: true},
function(err, model)
{
console.log(err);
},
// Response to send to User data as JSON
res.json(provider)
);
// Saving Data into MongoDB
provider.save(function(err)
{
if (err)
{
res.send(err);
}
});
});
});
相关文章:
- Mongoose-在更新中删除数组元素
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 返回一个关联数组,而不是mongoose中的文档数组
- 使用mongoose将数据推送到mongoDB模式中的数组中
- Mongoose模式:强制创建一个对象数组
- SocketIO/Mongoose JS.推送到数组的问题
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 如何在不选择模式配置参数的情况下,使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach
- MongoDB Mongoose使用数组保存或更新
- 如何在Mongoose中从多个数组更新数组内部的值
- 使用 Mongoose 将数组(“标签”)保存到 MongoDB
- 使用 Mongoose 和 Node 将数据插入数组时出错
- 节点.js不能使用 promise、Mongoose 和 GET 请求推送到全局数组
- 从 Mongoose 中具有特定属性的数组中获取所有对象
- 如何只需一次调用就可以将对象数组保存到mongoose DB中
- 如何在数组中保存mongodb集合?同时将mongoose与expressJS一起使用
- 在Mongoose中更新子域数组而不获取父数组
- 将对象推送到mongoose数组,并检查数组对象中是否存在重复字段
- 将JSON对象推入Mongoose数组
- 为什么我的模式不能在mongoose数组中添加默认值?