2012-04-20 8 views
10

estoy teniendo problemas para averiguar lo que significa este errorerror mongodb críptica LEFT_SUBFIELD sólo admite objeto: no Totales: 6

LEFT_SUBFIELD sólo es compatible con las estadísticas de objeto: no: 6

Parece estar sucediendo cuando Estoy insertando en mi colección de perfiles. Estoy usando mongoose.js. Estamos insertando recuentos de publicaciones en cada categoría en la propiedad de estadísticas, p.

stats: {category:count, category2: count2}. 

Aquí es mi esquema

var ProfileSchema = new Schema({ 
    uname: { 
    type: String, 
    required: true, 
    index: true, 
    unique: true 
    }, 
    fname: String, 
    lname: String, 
    stats: { 
    type:{}, 
    "default":{}, 
    required:true 
    }, 
    created: { 
    type:Date, 
    required:true, 
    "default":Date.now 
    } 
}); 

creo que podría estar sucediendo cuando estoy actualizando las estadísticas objeto $ inc recuentos de manera que las estadísticas pueden salir a algo parecido a esta actualización

db.status.update({_id:xyz}, {$inc: { stats.foo : 1, stats.bar:1}}) 

Aquí está mi código de mangosta

 var tags = ["comedy", "action", "drama"]; 

     //also adding the postId to the posts collection of profile 
     var updateCommand = {$push: {posts: post._id}}; 

     var stats = {}; 
     for (var i = tags.length - 1; i >= 0; i--){ 
     stats["stats." + tags[i].toString()] = 1; 
     }; 
     updateCommand.$inc = stats; 

     Profile.update(
     {uname: uname}, 
     updateCommand, 
     {safe:true, upsert:true}, 
     callback 
    ); 

Respuesta

1

Puede estar ejecutando en esto:

https://jira.mongodb.org/browse/SERVER-2651

o

https://jira.mongodb.org/browse/SERVER-5227

Ambos de los cuales se fijan en la rama 2.1 dev ya, pero no (todavía) portado a 2,0

Aquí hay una discusión decente acerca de un problema similar:

https://groups.google.com/forum/?fromgroups#!topic/mongodb-user/VhjhcyEdbNQ

Básicamente se reduce al hecho de que es probable que esté pasando una clave vacía como parte de la actualización que debe evitarse.

24

También ocurre si está tratando de actualizar un subdocumento de un objeto no.

> db.test.insert({_id: 10240292, object: 'some string'}) 
> db.test.update({_id: 10240292}, {$set: {'object.subkey': 'some string'}}) 
LEFT_SUBFIELD only supports Object: object not: 2 

Quizás no es su caso, pero puede ayudar a alguien que busca este error.

+2

Esto exactamente, gracias por la publicación! Me hizo rascar la cabeza por un buen rato, un poco desagradable para trabajar. – Aktau

0
db.collection('fs.files').update({_id: Object_id}, {$set: {'metadata': {"foo" : "bar"}}} 
Cuestiones relacionadas