2012-04-20 12 views
10

Mam problemy zastanawianie się, co oznacza ten błądbłąd MongoDB tajemnicze LEFT_SUBFIELD obsługuje tylko obiektu: Statystyki nie: 6

LEFT_SUBFIELD obsługuje tylko obiektu: statystyk nie: 6

Wydaje się dzieje, kiedy wstawiam do mojej kolekcji profili. Używam mongoose.js. Wstawiamy liczbę postów w każdej kategorii we właściwości statystyki, np.

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

Oto mój schemat

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 
    } 
}); 

myślę, że to może się dziać, gdy jestem aktualizowania statystyk obiekt $ inc liczy więc, że statystyki mogą wyjdzie coś takiego aktualizacji

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

Oto mój kod mangusty

 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 
    ); 

Odpowiedz

1

może być uruchomiony w tym:

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

lub

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

z których oba są ustalone w branży 2,1 dev już jednak (jeszcze) nie przeniesione do 2,0

Jest tu godna dyskusja na temat podobnego problemu:

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

Zasadniczo sprowadza się to do faktu, że prawdopodobnie przekazujesz pusty klucz jako część aktualizacji, której należy unikać.

24

Zdarza się tak również, jeśli próbujesz zaktualizować poddokument innego obiektu.

> 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 

Może to nie twoja sprawa, ale może pomóc komuś, kto gogli dla tego błędu.

+2

To właśnie dzięki za post! Miałem drapanie głowy przez jakiś czas, trochę nieprzyjemne do pracy. – Aktau

0
db.collection('fs.files').update({_id: Object_id}, {$set: {'metadata': {"foo" : "bar"}}} 
Powiązane problemy