dar*_*dow 6 mongoose mongodb node.js express
我正在尝试使用mongoose在文档中保留一组对象.我已经尝试了多次,但它不是在文档中持久化数组.它在文档中放置一个空数组.
以下是我的架构:
var ProfileSchema = new Schema({
name: String,
PagesData: [{
pageAccessToken: {type: String, get: decryptText, set: encryptText},
category: String,
name: String,
id: String,
perms: [String]
}]
});
module.exports = mongoose.model('Profile', ProfileSchema);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下查询保存包含对象数组的文档:
var newProfile = new Profile();
newProfile.name = "someName";
newProfile.PagesData = [ { pageAccessToken: 'someToken',
category: 'Bags/Luggage',
name: 'someBrandName',
id: '12345',
perms:
[ 'ADMINISTER',
'EDIT_PROFILE',
'CREATE_CONTENT' ] } ];
newProfile.save(function(err, result, numAffected){
if(err) {
console.log(err);
res.send(500, "Error");
}
console.log(result);
res.send(200, "Success");
});
Run Code Online (Sandbox Code Playgroud)
我尝试使用调试mongo命令
require('mongoose').set('debug',true)
在调试日志中显示,在插入命令执行期间清空数组.
任何人都可以告诉我如何在我的架构中存储这个对象数组?
谢谢,
更新:
这太久了,我仍然无法找出问题的根本原因.为此,github上有一个很长的线程. https://github.com/Automattic/mongoose/issues/3249 我希望其他专家请一看,并建议我以某种方式解决问题.我真的很困惑.
更新2:
到目前为止,解决方案都没有对我有用,因此我决定仅修改架构以满足我的要求.这导致了一个不同的问题:
我想创建一个mapId作为键的映射和一个字符串值数组作为其值.我能得到的最接近的是:
var schema = new Schema({
map: [{myId: {type:mongoose.Schema.Types.ObjectId, ref: 'MyOtherCollection'}, values: [String]}]
});
Run Code Online (Sandbox Code Playgroud)
但不知何故,这对我不起作用.当我使用{upsert:true}执行更新时,它无法正确填充地图中的键:值.事实上,我甚至不确定我是否正确地声明了架构.
任何人都可以告诉我架构是否正确?另外,如何使用{upsert:true}为此架构执行更新?
此外,如果上述情况不正确且无法实现,那么我如何通过其他方式对我的需求进行建模.我的用例是我想保留给定objectId的值列表.我不希望任何带有相同键的重复条目,这就是选择地图的原因.
请建议方法是否正确或是否应该以其他方式建模?
谢谢
我尝试了你在这里提供的确切代码,它对我有用.我不确定是什么原因导致了这个问题.除非我们得到同样的问题,否则很难纠正它.以下是您可能尝试的一些建议:
一旦你知道问题究竟在哪里,你就能找到解决方案.我希望它有所帮助.
我测试了这个,插件适用于我使用下面:(我不得不删除get:decryptText,set:encryptText)
var n = { name: "Testing for mongoose", PagesData : [{ pageAccessToken: 'someToken',
category: 'Bags/Luggage',
name: 'someBrandName',
id: '12345',
perms:
[ 'ADMINISTER',
'EDIT_PROFILE',
'CREATE_CONTENT' ] } ] }
Profile.create(n, function (err) {
if (!err) {
return 'records saved successfully';
}
else {
return error on save:' + err;
}
});
Run Code Online (Sandbox Code Playgroud)
你有没有尝试过
Profile.create({
name: "someName",
PagesData: [
{
pageAccessToken: 'someToken',
category: 'Bags/Luggage',
name: 'someBrandName',
id: '12345',
perms: [
'ADMINISTER',
'EDIT_PROFILE',
'CREATE_CONTENT'
]
}
]
}, function(err, profile) {
// do your stuff
})
Run Code Online (Sandbox Code Playgroud)
?
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |