2017-01-18 3 views
1

Может ли кто-нибудь сказать мне, является ли это законным в мангусте. Я пытаюсь обновить sub doc в массиве основного документа для студентов. Когда я запускаю запрос на обновление из оболочки, он работает нормально, но из приведенного ниже кода он не обновляет данные.Обновить документ mongo внутри функции результата поиска

 Student.findOne({ 
    "phone._id": mongoose.Types.ObjectId('587e6409e06170ba1708dc21') 
}, 
{ 
    _id: 0, 
    phone: 1 
}, 
function(err, 
phone){ 
    if(err){ 
     console.log(err) 
    }if(phone.Home==phone.Cell||phone.secondary===undefined){ 
     Student.update({ 
      'Student._id': mongoose.Types.ObjectId('587e6409e06170ba1708dc22'), 
      'phone._id': mongoose.Types.ObjectId('587e6409e06170ba1708dc21') 
     }, 
     { 
      "$set": { 
       'phone.$.number': 453454554 
      } 
     } 
    }) 
}); 

ответ

0

согласно документации https://docs.mongodb.com/manual/reference/method/db.collection.update/ db.collection принимает несколько аргументов

db.collection.update(
    <query>, 
    <update>, 
    { 
    upsert: <boolean>, 
    multi: <boolean>, 
    writeConcern: <document>, 
    collation: <document> 
    } 
) 

так что вы должны сделать что-то вроде этого:

Student.update({ 
    'Student._id' : ObjectId('587e6409e06170ba1708dc22'), 
    <Your Query>, 
    true, 
    true 
}) 
+0

Привет, aroden, мой вопрос в том, могу ли я написать обновление внутри findOne ({«phone._id»: mongoose.Types.ObjectId ('587e6409e06170ba1708dc21')}, {_ id: 0, phone: 1}, function (err , телефон) {// обновить логику}), я также попытался решить обещание findOne, которое тоже не помогло. –

+0

Я не думаю, что вы можете. вы можете использовать то, что findOne возвращает в запросе обновления, но я не думаю, что вы можете использовать его внутри. – argoden

0

По вашему требованию вы можете сделать это:

db.collection.findOneAndUpdate(
    <filter>, 
    <update>, 
    { 
    projection: <document>, 
    sort: <document>, 
    maxTimeMS: <number>, 
    upsert: <boolean>, 
    returnNewDocument: <boolean> 
    } 
) 
+0

, пожалуйста, посмотрите на мой отредактированный вопрос, я добавил условие «если», как я могу достичь этого с помощью findOneAndUpdate, поскольку мне нужно сравнить два разных поля в одном документе. Любое предложение или помощь приветствуются. –

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