gpt4 book ai didi

node.js - 无法使用 mongoose 在 mongodb 中持久化对象数组

转载 作者:IT老高 更新时间:2023-10-28 13:24:26 27 4
gpt4 key购买 nike

我正在尝试使用 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);

我正在尝试使用以下查询保存包含对象数组的文档:

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");
});

我尝试使用

调试 mongo 命令

require('mongoose').set('debug', true)

在调试日志中显示,插入命令执行期间为空数组。

谁能告诉我如何将这个对象数组存储在我的架构中?

谢谢,

更新:

时间太长了,我仍然无法找出问题的根本原因。 github上有一个很长的线程。 https://github.com/Automattic/mongoose/issues/3249我希望其他专家看看并建议我一些可以解决问题的方法。我真的被困在这个问题上。

更新 2:

到目前为止,没有一个解决方案适合我,所以我决定只修改架构以满足我的要求。这导致了另一个问题:

我想创建一个以 objectId 作为键并以字符串值数组作为其值的映射。我能得到的最接近的是:

var schema = new Schema({
map: [{myId: {type:mongoose.Schema.Types.ObjectId, ref: 'MyOtherCollection'}, values: [String]}]
});

但不知何故,这对我不起作用。当我使用 {upsert: true} 执行更新时,它没有正确填充 map 中的键:值。事实上,我什至不确定我是否正确地声明了架构。

谁能告诉我架构是否正确?另外,如何使用 {upsert: true} 对此架构执行更新?

另外,如果上述不正确并且无法实现,那么我该如何通过其他方式来模拟我的要求。我的用例是我想保留给定 objectId 的值列表。我不希望任何具有相同键的重复条目,这就是选择 map 的原因。

请建议该方法是否正确或是否应该以其他方式建模?

谢谢

最佳答案

我尝试了您在此处提供的确切代码,它对我有用。我不确定是什么导致了您的问题。除非我们遇到同样的问题,否则很难纠正它。以下是一些您可以尝试的建议:

  1. 创建一个简单的架构并尝试存储对象,这样您就可以弄清楚它是否与架构有关。
  2. 您可以在示例应用中试用您的架构,看看是否有依赖导致了问题。

一旦您知道问题的确切位置,您也可以找到解决方案。希望对你有帮助。

关于node.js - 无法使用 mongoose 在 mongodb 中持久化对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com