Comment convertir une chaîne en un ObjectId
Je suis l'obtention de données de MongoDB et de la liaison à un WPF datagrid.
Mon code permet de sélectionner plusieurs lignes, récupère les Id et les mises à jour les enregistrements sélectionnés:
var server = MongoServer.Create(this.connectionString);
var db = server.GetDatabase(DATABASE);
var viewTrue = db.GetCollection(RISKALERT_TBL);
var count = viewTrue.Count();
foreach (RiskSettings row in grdRiskAlerts.SelectedItems)
{
viewTrue.Update(Query.EQ("ID",row.ID), Update.Set("View", "False"));
LoadandBindData();
}
Mais il ne fait pas de mise à jour de l'enregistrement.
J'ai pensé que peut-être la ligne.l'id est de retour en chaîne et l'ID de type de données est objectId.
Cette requête est de travailler pour les autres type de données à l'exception des cas ci-dessus.
OriginalL'auteur user768853 | 2011-12-14
Vous devez vous connecter pour publier un commentaire.
Pour convertir une chaîne en
ObjectId
, utilisez le ObjectId.Parse(string) méthode.Aussi essayer de match sur
"_id"
plutôt que"ID"
.Donc quelque chose comme:
oui, c'est comme
int.Parse
. Si la chaîne ne peut pas être converti enObjectId
, bien sûr, nous ne pouvons pas espérer qu'il fonctionne.OriginalL'auteur Zaid Masud
Je suis tombé sur le même problème lors de la configuration d'une propriété publique pour l'ObjectID.
Ma propriété converti à ObjectID à une chaîne, et un retour à un ObjectID à l'aide de l'extrait de code suivant.
De l'ObjectID n'était pas une option, donc j'ai eu à utiliser la totalité de l'espace de noms, pour accéder à la
.Parse()
comme ceMongoDB.Bson.ObjectId.Parse
Espérons que cette aide!
OriginalL'auteur Brian J
La façon la plus simple que j'ai trouvé était à utiliser:
new ObjectId(yourString)
...Cela vous donnera une MongoDB ObjectId à partir d'une chaîne et fonctionne avec n'importe quel de vos requêtes.OriginalL'auteur SaltySub2
Vous avez juste besoin d'exiger de l'ObjectId fonction de votre mongo.
Alors vous pouvez l'utiliser comme ça:
De sorte que vous pouvez changer votre ligne de code:
OriginalL'auteur julien bouteloup
J'ai rencontré un problème similaire avec le code et un petit tweak a fait le tour pour moi.
Donc l'EQ()-> requiert un objet et d'une chaîne.
puisque vous utilisez
De la requête.EQ("ID",ligne.ID)
Je suggère de faire usage de quelque chose comme cela
l'id doit être de type ObjectId
var res= Requête.EQ(p => p.Id, id);
avec res paramètre comme une unité et de l'utilisation de la requête.
Un soln. que j'ai utilisé.
J'espère que cela aide.
OriginalL'auteur Shardul Negi