MongoDb – 有空值的有界数组显示无界

在我对Mongodb和Mongoose的新手技巧中,我似乎在这个根本的任务上失败了。

我有10个元素的有界arrays。 一个用户只能拥有10只宠物,所以我想通过设置字段来限制它,空值是最好的方法。

pets数组值在创build时是空的,因为用户可以随时添加宠物。 当我在mongo控制台中查看时, pets数组是无界的,没有字段。 我也不能将值添加到数组中。

mongoose纲要:

 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查询的一部分,该function也已在Mongoose中实现。 将元素添加到数组并限制其大小的步骤如下所示:

  1. 将元素推入数组中。
  2. 切片arrays。

这段代码解释了如何使用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'); }); });