2016-03-21 5 views
0

У меня есть коллекции, как это (очень упрощенный) ...Invalid обратного вызова() аргумент ошибки с Mongoose

var parentSchema = new mongoose.Schema({ 
    firstName: String, 
    mobile: String 
}); 

var familySchema = new mongoose.Schema({ 
    groupId: { type: mongoose.Schema.Types.ObjectId, index: true }, 
    parents: [parentSchema] 
}); 

Для данной группы, я хотел бы найти все из родителей семей в том, что группы, у которых есть набор мобильных значений (существует), и отменять эти мобильные значения.

Я был в состоянии собрать столько вместе, глядя на другие примеры ...

Family.update(
    { groupId: someGroupId, "parents.mobile": {"$exists":"true"} }, 
    { $unset : { "parents.$.mobile" : 1 } }, false, true 
).then(function() { 
    // do other stuff 
}); 

Running генерирует ошибку:

Trace: [Error: Invalid callback() argument.]

Я попробовал несколько вариантов, но это один кажется мне самым правильным.

ответ

2

.update() подписи для моделей Mongoose является:

Model.update(<{query}>,<{update}>,[<{options}>],[callback]) 

Так при использовании обещания, это только первый два с дополнительным «третьего» options. «Четвёртая» будет callback функции, и, следовательно, ошибка:

Family.update(
    { "groupId": someGroupId, "parents.mobile": {"$exists": true } }, 
    { "$unset": { "parents.$.mobile" : "" } }, 
    { "multi": true } 
).then(function() { 

Слишком много людей читают "shell" signature, даже несмотря на использование:

.update(<{query}>,<{update}>,<upsert>,<multi>) 

устарели в пользу стандарта «варианты» в течение некоторого времени.

Всегда обращайтесь к методу, который действительно применяется к вашему языковому API.

+0

очень полезно. Благодарю. Я уверен, что существует лучший способ навигации по их api docs, чем текстовый поиск на этой гигантской странице. я чего-то не хватает? – user1272965

+0

@ user1272965 Ну, гиперссылка, которую я вам дал, идет прямо к методу, поэтому вам кажется, что этого не хватает, а боковая панель слева с каждым классом (т.е. [model] (http://mongoosejs.com/docs/api.html) # model-js)), а затем каждый из перечисленных методов там также. Это все, если ты посмотришь. –

Смежные вопросы