2016-11-05 18 views
2
{ 
    "_id": "581dc52e2c26be354164d528", 
    "name": "vipin", 
    "__v": 0, 
    "post": [ 
     { 
     "like": "today", 
     "_id": "581dc52e2c26be354164d529", 
     "comment": [ 
      { 
      "date": "today", 
      "username": "vipin", 
      "_id": "581dc52e2c26be354164d52a", 
      "detail": [ 
       { 
       "time": "now", 
       "day": "saturday", 
       "_id": "581dc52e2c26be354164d52b" 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    }, 

я быть_наст вложенная subdocument.i хочет обновить комментарий .date.but я не могу это сделать й хотят вложенное обновление поддокумента но запрос не работает.вложенной обновление поддокумента MongoDB

Test.update({"_id":"581dc52e2c26be354164d528","post._id":"581dc52e2c26be354164d529","comment._id":"581dc52e2c26be354164d52a" },{ 
     "$set":{ 
      "post.$.comment.0.date.0":"tommorow" 
     } 
    },function(err,data){ 
     if(data){ 
      res.json(data) 
     }; 
     if(err){ 
      res.json(err) 
     } 
    }) 
} 

мой запрос теперь обработан .plzz кто-нибудь предлагает мне.

+0

Это не возможно. Взгляните на это для предложений. http://stackoverflow.com/questions/40 379369/mongoose-increment-a-field-value-in -ested-array/40381021 # 40381021 – Veeram

+0

это возможно при ограниченном вложенном массиве объектов. –

+0

Я говорил о ** вложенном ** ** массиве ** замене заполнителя в моем связанном ответе. Таким образом, приведенные ниже примеры и комментарии не являются массивами. – Veeram

ответ

1

mongodb не поддерживает позиционный оператор, соответствующий вложенным массивам. проверьте этот вопрос, он все еще находится в открытом состоянии: https://jira.mongodb.org/browse/SERVER-831

обходной путь: использование агрегирования и выборка требуемого поддокумента вносят изменения и дополняют поддокумент с использованием запроса на обновление.

+0

ofcource мы можем обновить наш вложенный поле дополнительного документа. Надеемся, что это поможет каждому пользователю mongodb. db.tests.update ({"post._id": ObjectId ("58204e89cfee37f023a567bd")}, {$ set: {"post. $. comment.detail.time": "Новости"}}) WriteResult ({"nMatched ": 1," nUpserted ": 1," nModified ": 1}) –

3

Okkk.we может обновлять наш вложенный вложенный документ в mongodb.this является нашей схемой.

var Post = new mongoose.Schema({ 
    name:String, 
    post:[{ 
     like:String, 
     comment:[{ 
      date:String, 
      username:String, 
      detail:{ 
       time:String, 
       day:String 
      } 
     }] 
    }] 
}) 

Теперь мы можем обновить наш Choosed поле в mongoDb.if ваш документ содержит более чем массив поля, как пост, комментарий, чем это может быть плохой .Но мы можем использовать много objects.like ..... . Если у нас нет проблем с обновлением.

post:[{ 
     like:String, 
     comment:{ 
      date:String, 
      username:String, 
      detail:{ 
       time:String, 
       day:String, 
       address:{ 
        street:String, 
        house:String 
       } 
      } 
     } 
    }] 
}) 

поэтому мы имеем решение первой схемы, как this.our MongoDB запрос работает правильно .so проверить это ...

  • для первого schema.if мы имеем взять больше один массив в поддокументе.

    Test.update ({ "post._id": "58206a6aa7b5b99e32b7eb58"}, {$ набор: { "пост $ comment.0.detail.time..": "Aajtk"}},

  • для второй схемы .if мы имеем взять больше, чем объекты

    db.tests.update ({ "post._id": ObjectId ("58204e89cfee37f023a567bd")}. {$ устанавливается:.. { "$ пост комментарий .detail.time ":" Новости "}})