Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDb-具有空值的有界数组显示无界_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript MongoDb-具有空值的有界数组显示无界

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

在我对Mongodb和Mongoose的新手技能中,我似乎在这个基本任务上失败得很惨

我有一个10个元素的有界数组。一个用户只能有10个宠物,所以我认为用设置的字段和空值来限制它是最好的方法

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中实现。将元素添加到数组并限制其大小的步骤如下:

  • 将元素推入阵列中
  • 对数组进行切片
  • 这段代码解释了如何使用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');
      });
    });
    

    出于某种原因,这并不是在数组中追加值,即使我删除了切片。