Mongo mise à jour de l'élément de tableau (.Conducteur NET 2.0)
EDIT:
Ne cherche pas le javascript moyen de le faire. Je suis à la recherche de la MongoDB C# 2.0 pilote de la façon de le faire (je sais que ça peut ne pas être possible; mais j'espère que quelqu'un connait une solution).
Je suis en train de mettre à jour la valeur d'un élément intégré dans un tableau sur le document principal de mon mongodb.
Je suis à la recherche d'un typage fort moyen pour ce faire. Je suis l'aide de la Mongodb c# 2.0 pilote
Je peux le faire en retirant l'élément, la mise à jour de la valeur, puis la réinsérer. Cela ne fonctionne tout simplement pas; car je suis l'écrasement de ce qui pourrait avoir été écrit dans l'intervalle.
Voici ce que j'ai essayé jusqu'à présent, mais avec pas de chance:
private readonly IMongoCollection<TempAgenda> _collection;
void Main()
{
var collectionName = "Agenda";
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("Test");
_collection = db.GetCollection<TempAgenda>(collectionName);
UpdateItemTitle(1, 1, "hello");
}
public void UpdateItemTitle(string agendaId, string itemId, string title){
var filter = Builders<TempAgenda>.Filter.Eq(x => x.AgendaId, agendaId);
var update = Builders<TempAgenda>.Update.Set(x => x.Items.Single(p => p.Id.Equals(itemId)).Title, title);
var result = _collection.UpdateOneAsync(filter, update).Result;
}
- double possible de MongoDB - mise à Jour d'un objet dans un Tableau imbriqué
- ce n'est pas un c# question?
- C'est toujours le même principe. Correspondre à l'élément de tableau dans la requête de la partie et l'utilisation de la position
$
de l'opérateur dans la mise à jour de la partie. Je n'ai pas juste tirer au hasard que d'un sac. - Je peux lire les mongo de la documentation et de le faire avec javascript, mais, comme je l'ai dit dans ma question, je suis à la recherche pour le fortement typé façon de le faire et comme je sais que l'incorporation de chaînes de caractères javascript dans mon code C# n'est pas fortement typé.
- Il y a toujours est un opérateur de position pour C#. Ce n'est pas "les chaînes de caractères javascript" il est "pointillé" et valable dans toutes les langues.
- bien que prometteur. Pouvez-vous me diriger dans la bonne direction; depuis que je suis à défaut de trouver cela sur mon propre. D'où la question ci-dessus.
- Et voici la Documentation: mise à Jour Intégré Champ
Vous devez vous connecter pour publier un commentaire.
M'a fallu un certain temps pour comprendre cela car il ne semble pas être mentionnés dans la documentation officielle (ou n'importe où ailleurs). J'ai cependant trouvé cette sur leur issue tracker, qui explique comment utiliser l'opérateur de position
$
avec C# 2.0 pilote.Cela devrait faire ce que vous voulez:
Remarquez que votre
Item.Single()
clause a été modifiée pourItem.Any()
et a déménagé à la définition du filtre.[-1]
ou.ElementAt(-1)
est apparemment un traitement particulier (en fait, tout ce < 0) et sera remplacé par l'opérateur de position$
.La ci-dessus sera traduit à cette requête:
ElementAt(-1)
ainsi.Merci, cela a été utile. J'ai un plus bien, j'ai utilisé ci-dessus pour les tableaux, le poussant à un tableau imbriqué et en tirant à partir de un. Le problème que j'ai constaté, c'est que si j'avais un tableau int (Donc pas d'un objet, d'un simple tableau int) que le PullFilter n'a pas fait de travail - "Impossible de déterminer la sérialisation de l'information" qui est étrange, comme c'est seulement un tableau d'entiers. Ce que j'ai fait était de faire un tableau d'objets avec un seul paramètre de type int, et tout a commencé à travailler. Probablement un bug, ou peut-être mon manque de compréhension. De toute façon, comme j'ai eu du mal à trouver de l'information sur le tirant et en le poussant vers l'objet imbriqué tableaux avec C# 2.0 pilote, j'ai pensé que je devrais poster mes trouvailles ici, comme ils utilisent la syntaxe ci-dessus.
Et aussi:
La bonne façon de mettre à jour un Document ou d'un sous-tableau est comme suit: