dúvida com um update usando mongodb driver c#

57 views
Skip to first unread message

maykon elias

unread,
Sep 13, 2012, 11:01:18 AM9/13/12
to br-mo...@googlegroups.com
Pessoal uma pequena dúvida,
tenho uma collection X:
{
  "Active" : "S",
  "FeatureName" : "Promotions",
  "Images" : [{
      "Name" : "promocao1.jpg",
      "Url" : "http://x.com",
      "File" : "HCJP50XG+xDjXdJObumTjm6WKyo=",
      "Sort" : NumberLong(1),
      "Version" : NumberLong(1),
      "Ativa" : "S",
      "NameStates" : null,
      "abbreviation" : null
    },
  "VersionGroup" : NumberLong(6),
  "_id" : ObjectId("5051e29d732f6f04b8fe000a")
}

Nesse documento notem que temos outra collection "Images", quero atualizar o filed "Ativa" dentro de "Images" para "N",
Alguém pode me ajudar? Estou usando mongodb driver c# 

Luiz Felipe Mendes

unread,
Sep 13, 2012, 3:22:49 PM9/13/12
to br-mo...@googlegroups.com
Olá Maykon,

  Eu nunca usei o driver de c#, mas em Mongo "natura" seria algo simples, você esta simplesmente acessando um campo dentro do seu objeto, então você usa um '.' para isso.

db.X.update( { SUA_QUERY }, { $set: { "Images.Ativa" : "N" } } );

Algumas coisas:

Primeiro, não entendi porque ter um '[' :

  "Images" : [{
 
Foi só um erro de digitacao né?

Outra observacao, esses são os nomes dos seus campos mesmo? Se for, já deixo a dica para modificá-los, coloquei nomes pequenos como

"Img" :{
   "nm": lala
   "at":  "N"
}

Isso economiza um bom espaço.

Lembrando para tomar cuidado com upserts e update de vários documentos de uma vez.

Dando uma olhada rapida aqui no c# driver eu faria assim:

MongoCollection<BsonDocument> X;
var query = new QueryDocument {
{  "_id" : ObjectId("5051e29d732f6f04b8fe000a") } 
};
var update = new UpdateDocument {
"$set", new BsonDocument("Images.Ativa", "N") }
};
BsonDocument updatedBook = books.Update(query, update);
 
Espero que dê certo.

Abracos

Waldecir Santos

unread,
Dec 13, 2012, 1:15:28 PM12/13/12
to br-mo...@googlegroups.com
Maykon,

O update somente com o Documento ira subistituir o antigo com o novo que foi passado, para atualizar apenas uma parte do documento deve se usar o $set. Como reportado pelo Luiz.
Reply all
Reply to author
Forward
0 new messages