$推送MongoDb无法正常工作?

时间:2015-11-24 07:58:30

标签: arrays node.js mongodb mongoose

我的架构如下所示:

    var exampleSchema = newSchema({
    profile:{
    experience :[{
              exp : String
    }]
   }
  }); 

这是更新个人资料收集经验的代码:

exampleSchema.statics.experience = function (id,experience, callback){
var update = {
        $push: {
          'profile.experience': experience
        }
      }
      this.findByIdAndUpdate(id,update,function(err) {
        if (err) {
          callback(err);
        } else {
          callback(null);
        }
      })

我收到的错误如The field 'profile.experience' must be an array but is of type String in document {_id: ObjectId('5653f1d852cf7b4c0bfeb54a')}[object Object]

console.log(经验)等于

{ exp: 'jlkjlkjlk' }

我的收藏品应如下所示:

experience:[
   {
    exp : "YYYY"
    },
   {
    exp:"xxxx"}
 ]

6 个答案:

答案 0 :(得分:2)

想象一下,你有这个系列:

/* 1 */
{
    "_id" : ObjectId("565425e862760dfe14339ba8"),
    "profile" : {
        "experience" : [ 
            {
                "exp" : "Experto"
            }
        ]
    }
}

/* 2 */
{
    "_id" : ObjectId("565425f562760dfe14339ba9"),
    "profile" : {
        "experience" : {
            "exp" : "Experto"
        }
    }
}

/* 3 */
{
    "_id" : ObjectId("5654260662760dfe14339baa"),
    "profile" : {
        "experience" : "Experto"
    }
}

如果您尝试(更新doc / * 2 * /):

db.profile.update(
   { _id: ObjectId("565425f562760dfe14339ba9") },
   { $push: { "profile.experience" : { exp : "Intermediate" } } }
)

您收到此错误:

  

字段' profile.experience'必须是数组但属于Object类型   在文件{_id:ObjectId(' 565425f562760dfe14339ba9')}

如果您尝试(更新doc / * 3 * /):

db.profile.update(
   { _id: ObjectId("5654260662760dfe14339baa") },
   { $push: { "profile.experience" : { exp : "Intermediate" } } }
)

你会得到:

  

字段' profile.experience'必须是数组但类型为String   在文件{_id:ObjectId(' 5654260662760dfe14339baa')}

答案 1 :(得分:1)

我像这样改变了Schema

 experience          : [{type:String,exp:String}],

我的更新对象看起来像这样

 var update = {
    $push: {
      'profile.experience': san.exp
}
};

san看起来像这样:{ exp: 'YYY' }

里面的mongoose collection像这样使用RoboMongo

 "experience" : [ 
        "experienced in XXX", 
        "YYY"
    ],

答案 2 :(得分:0)

$push: {
    'profile.experience': experience
}

删除.exp

答案 3 :(得分:0)

首先,您必须检查是否已将您的字段声明为这样的数组(请查看字段产品):

   shop = {
        'name': "Apple Store",
        'description': "",
        'direction': "",
        'contact': "",
        'products':[]
    }

现在,如果您想使用$ push向现场产品中添加一些东西

product = {
        'name': "Iphone 6",
        'description': "Iphone model 6, 64GB",
        'price': 700,
        'count': 3 
    }
 myquery = { "name" : "Apple Store" }
 obj ={"$push":{"products":{"$each": [product]}}}
 db.collection.update_one(myquery,obj)

此代码是为PyMongo框架提供的。要在MongoDB中使用,请直接将update_one替换为update。 Mongo resource

答案 4 :(得分:0)

您可以使用 $set 代替可能有效的 $push

$set: {
    'profile.experience': experience
}

答案 5 :(得分:-1)

您是否正在搜索将多个值添加到单个字段中,然后使用此值。 将其写为您的模型或架构:

library(datasets)
iris$dummy_virginica_iris <- 0
iris$dummy_virginica_iris[iris$Species == 'virginica'] <- 1
iris$dummy_virginica_iris

# Logistic regression model.
glm <- glm(dummy_virginica_iris ~ Petal.Width + Sepal.Width, 
        data = iris, 
        family = 'binomial') 
summary(glm)

# Classifer.
glm.pred <- predict(glm, type="response")
virginica <- ifelse(glm.pred > .5, TRUE, FALSE)

然后在您的控制器中写入:

    arrayremarks:[{remark: String}]