Javascript MongoDb-具有空值的有界数组显示无界
在我对Mongodb和Mongoose的新手技能中,我似乎在这个基本任务上失败得很惨 我有一个10个元素的有界数组。一个用户只能有10个宠物,所以我认为用设置的字段和空值来限制它是最好的方法Javascript MongoDb-具有空值的有界数组显示无界,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,在我对Mongodb和Mongoose的新手技能中,我似乎在这个基本任务上失败得很惨 我有一个10个元素的有界数组。一个用户只能有10个宠物,所以我认为用设置的字段和空值来限制它是最好的方法 pets数组值在创建时为空,因为用户可以在创建过程中添加宠物。当我在mongo控制台中查看时,pets数组是无界的,没有字段。我也不能向数组中添加值 猫鼬模式: var userSchema = new Schema({ firstName: { type: String, required: true
pets
数组值在创建时为空,因为用户可以在创建过程中添加宠物。当我在mongo控制台中查看时,pets
数组是无界的,没有字段。我也不能向数组中添加值
猫鼬模式:
var userSchema = new Schema({
firstName: { type: String, required: true },
lastName: { type: String, required: true },
username: { type: String, required: true, unique: true },
location: String,
created_at: Date,
pets: [
{ "pet0": {} },
{ "pet1": {} },
{ "pet2": {} },
{ "pet3": {} },
{ "pet4": {} },
{ "pet5": {} },
{ "pet6": {} },
{ "pet7": {} },
{ "pet8": {} },
{ "pet9": {} }
]
});
mongodb: {“_id”:ObjectId(“56a3e324bdebcf801c1ca224”),“firstName”:“bob”,“lastName”:“smith”,“username”:“bob123”,“pets”:[],“_v”:0}
修改阵列时:
UserModel.findOne({ firstName: "bob" }, 'pets', function(err, user) {
user.pets[0] = { "name": "felix", "type": "cat" }
user.save(function(err) { console.log(err); console.log('saved')});
});
输出:
Mongoose: users.findOne({ firstName: 'bob' }) { fields: { pets: 1 } }
null
/home/one/github/foo/node_modules/mongoose/lib/schema/documentarray.js:100
doc.validate({ __noPromise: true }, function(err) {
^
TypeError: undefined is not a function
at /home/one/github/foo/node_modules/mongoose/lib/schema/documentarray.js:100:11
at DocumentArray.SchemaType.doValidate (/home/one/github/foo/node_modules/mongoose/lib/schematype.js:654:22)
at DocumentArray.doValidate (/home/one/github/foo/node_modules/mongoose/lib/schema/documentarray.js:78:35)
at /home/one/github/foo/node_modules/mongoose/lib/document.js:1156:9
at process._tickCallback (node.js:355:11)
MongoDB允许您访问。作为.update
查询的一部分,此功能也已在Mongoose中实现。将元素添加到数组并限制其大小的步骤如下:
UserModel.findOne({ firstName: "bob" }, function(err, user) {
UserModel.update(user, {
$push: {
pets: {
$each: [{ name: "felix", type: "cat" }],
$slice: -10
}
}
}, function(err, numAffected) {
if (err) console.log(err);
console.log('updated');
});
});
出于某种原因,这并不是在数组中追加值,即使我删除了切片。