const userSchema = new Schema({
username: {
type: String,
unique: true //< Adds a unique index
},
password: String,
email: {
type: String,
unique: true //< Adds a unique index
},
categoryLinks: { type:Array, "default": [] },
links : { type : Array , "default" : [] },
imagelink: String,
plan: String,
bakiye: Number,
});
字符串
我想让categoryLinks
作为一个数组,它包含多个相同类型的对象,但在mongoose上却没有做到这一点。
我试着(举例说明):
categoryLinks: {
type: {Array, default: [ {"label": String, "link":String, "links": []}, {/*more of the same type..*/} ] },
}
型
所以当我找到一个使用findOne
的用户时,我可以访问categoryLinks
,
await userModel.findOne({
username: req.session.username
}).then(
(user)=>{
for(var k = 0; k < user.categoryLinks.length; k++){
console.log(user.categoryLinks[k].links.label + " is now iterating category");
for(var i=0; i < user.categoryLinks[k].links.length; i++){
//update user.categoryLinks[k].links... by using push() or findOneAndUpdate??
}
//user.categoryLinks.links.forEach() or can use for each
}
});
型
我想访问它,因为我正在访问一个JavaScript对象与对象键像这样。我失败了,
然后可能通过标签查找索引并推送到其数组(或者删除元素)来更新
await userModel.findOneAndUpdate(filter, {user.categoryLinks[filter.k].links : user.categoryLinks[filter.k].links.push(newLink)});
型
如果我想更新对象内部的数组,我可以直接使用push吗?
所以基本上,我有一个数组,它包含的对象也包含数组。我如何使用findOneAndUpdate()
这样的函数来更新它?我可以使用push()
方法吗?
1条答案
按热度按时间nfg76nw01#
我认为最好的选择是使用Subdocuments。
在这种方法中,您为将存储在
categoryLinks
中的对象定义了一个模式。您可以获得定义良好的模式的所有验证好处,但这意味着如果您有大量对象,文档可能会变得无法控制。我的意思是,如果您的应用程序容量很大,并且每个用户都要处理数万个categoryLinks
对象,那么您可以看到这将如何使数组在存储方面非常大。MongoDB有一个标准的16MB文档限制。对于大多数应用程序来说,这是可以的。定义
categoryLinkSchema
:字符串
将
categoryLinkSchema
设置为categoryLinks
类型的值:型
现在,当你想向
categoryLinks
数组添加一个对象时,你可以这样做:型