2013-08-08 3 views
1

Например, у нас есть документы в процессе сбора.Как удалить одну запись из набора, являющегося дочерним объектом документа?

>> db.test.find() 
{ name: abc, child: [ {name: child1, age:10}, 
         {name: child2, age:20}, 
         {name: child3, age:30} ]} 

{ name: abcd, child: [ {name: child1, age:10}, 
         {name: child2, age:20}, 
         {name: child3, age:30} ]} 

Я хочу удалить тот, у кого возраст равен 10 от ребенка, установленного в первом документе. Как мне это сделать? Ожидаемый результат должен быть:

{ name: abc, child: [ {name: child2, age:20}, 
         {name: child3, age:30} ]} 

{ name: abcd, child: [ {name: child1, age:10}, 
         {name: child2, age:20}, 
         {name: child3, age:30} ]} 

ответ

1

простым способом было бы использовать update с $pull;

db.test.update({name:'abc'}, {$pull: {'child': {'age':10}}}) 

Демонстрация;

> db.test.find() 
{ "_id" : ObjectId("52034a77a45fcb007cbab9ac"), "name" : "abc", 
     "child" : [{ "name" : "child1", "age" : 10 },  
       { "name" : "child2", "age" : 20 }, 
       { "name" : "child3", "age" : 30 } ] } 
{ "_id" : ObjectId("52034a7aa45fcb007cbab9ad"), "name" : "abcd", 
     "child" : [ { "name" : "child1", "age" : 10 }, 
        { "name" : "child2", "age" : 20 }, 
        { "name" : "child3", "age" : 30 } ] } 

> db.test.update({name:'abc'}, {$pull: {'child': {'age':10}}}) 
> db.test.find() 
{ "_id" : ObjectId("52034a77a45fcb007cbab9ac"), "name" : "abc", 
     "child" : [{ "name" : "child2", "age" : 20 }, 
       { "name" : "child3", "age" : 30 } ] } 
{ "_id" : ObjectId("52034a7aa45fcb007cbab9ad"), "name" : "abcd", 
     "child" : [ { "name" : "child1", "age" : 10 }, 
        { "name" : "child2", "age" : 20 }, 
        { "name" : "child3", "age" : 30 } ] } 

EDIT: Что касается вашего вопроса в комментарии, вот как установить комментарий на возраст 30 ребенка «ABCD»;

db.test.update({name:'abcd', 'child.age':30}, 
       {$set: {'child.$.comment': 'nothing'}}) 
+0

It's working. Готово. Благодарю. – user2663484

+0

Как обновить часть ребенка? Если я ожидаю получить: {"_id": ObjectId ("52034a77a45fcb007cbab9ac"), "name": "abc", "child": [{"name": "child2", "age": 20}, { «name»: «child3», «age»: 30}]} {"_id": ObjectId ("52034a7aa45fcb007cbab9ad"), "name": "abcd", "child": [{"name": "child1 "," age ": 10}, {" name ":" child2 "," age ": 20}, {" name ":" child3 "," age ": 30, comment: 'nothing'}]} , Как это сделать? – user2663484

+0

@ user2663484 Добавил это к ответу. Если вам нужна дополнительная помощь, пожалуйста, создайте новый вопрос, поскольку это имеет тенденцию уделять больше внимания вопросам, чем обновлению. –

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