Cryptic mongodb error LEFT_SUBFIELD поддерживает только объект: не имеет статистики: 6
Мне трудно понять, что означает эта ошибка
LEFT_SUBFIELD поддерживает только объект: нет статистики: 6
Кажется, что происходит, когда я вставляю в свою коллекцию профилей. Я использую mongoose.js. Мы вставляем количество записей в каждой категории в свойстве статистики, например.
stats: {category:count, category2: count2}.
Вот моя схема
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
}
});
Я думаю, что это может произойти, когда я обновляю счетчик $st count объектов, чтобы статистика могла выходить на что-то вроде этого обновления.
db.status.update({_id:xyz}, {$inc: { stats.foo : 1, stats.bar:1}})
Вот мой код мангуста
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
);
Ответы
Ответ 1
Вы можете столкнуться с этим:
https://jira.mongodb.org/browse/SERVER-2651
или
https://jira.mongodb.org/browse/SERVER-5227
Оба из них исправлены в ветки 2.1 dev уже, но не (пока) обращены в 2.0
Здесь есть достойная дискуссия о подобной проблеме:
https://groups.google.com/forum/?fromgroups#!topic/mongodb-user/VhjhcyEdbNQ
В основном это сводится к тому, что вы, вероятно, передаете пустой ключ как часть обновления, которого следует избегать.
Ответ 2
Это также происходит, если вы пытаетесь обновить поддокумент не-объекта.
> 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
Возможно, это не ваше дело, но оно может помочь кому-то, кто отправляется на эту ошибку.
Ответ 3
db.collection('fs.files').update({_id: Object_id}, {$set: {'metadata': {"foo" : "bar"}}}