Как преобразовать строку в ObjectId - PullRequest
5 голосов
/ 14 декабря 2011

Я получаю данные из MongoDB и привязываюсь к сетке данных WPF.

Мой код выбирает несколько строк, получает идентификаторы и обновляет выбранные записи:

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();
}

Но он не обновляетсязапись.

Я подумал, что, возможно, row.id возвращает строку, а ID типа данных - это objectId.

Этот запрос работает для других типов данных, кроме приведенного выше случая.

Ответы [ 5 ]

13 голосов
/ 16 декабря 2011

Чтобы преобразовать строку в ObjectId, используйте метод ObjectId.Parse (string) .

Также попробуйте найти совпадение на "_id" вместо "ID".

Так что-то вроде:

viewTrue.Update(Query.EQ("_id", ObjectId.Parse(row.ID)), Update.Set("View", "False")); 
3 голосов
/ 15 ноября 2015

Я столкнулся с той же проблемой при настройке открытого свойства для ObjectID.

Мое свойство преобразовало ObjectID в строку и обратно в ObjectID, используя следующий фрагмент кода.

ObjectID не предлагался в качестве опции, поэтому мне пришлось использовать полное пространство имен для доступа к .Parse(), как это MongoDB.Bson.ObjectId.Parse

    public string Id
    {
        get { return Convert.ToString(_id); }
        set { _id = MongoDB.Bson.ObjectId.Parse(value); }
    }

Надеюсь, это поможет!

2 голосов
/ 14 марта 2017

Самый простой способ, который я нашел, это использовать: new ObjectId(yourString) ... Это даст вам объектный идентификатор MongoDB из строки и должен работать с любыми вашими запросами.

0 голосов
/ 12 октября 2018

Я столкнулся с похожей проблемой с кодом, и небольшой трюк помог мне.

Так что EQ () -> требует объект и строку.так как вы используете
Query.EQ ("ID", row.ID), я бы предложил использовать что-то вроде этого

идентификатор должен иметь тип ObjectId var res = Query.EQ (p => p.Id, id);

с параметром res в качестве единицы и использовать требуемый запрос.Soln.который я использовал.

Надеюсь, это поможет.

enter image description here

0 голосов
/ 14 января 2016

Вам просто нужно потребовать функцию ObjectId от вашего монго.

ObjectId = require('mongodb').ObjectID;

Тогда вы можете использовать это так:

ObjectId(row.ID)

Таким образом, вы можете изменить строку кода на:

viewTrue.Update(Query.EQ("ID",ObjectId(row.ID)), Update.Set("View", "False"));
...