Понадобилось время, чтобы понять это, поскольку оно, похоже, не упоминается ни в одной официальной документации (или где-либо еще). Тем не менее, я нашел этот в своем трекере проблем, в котором объясняется, как использовать оператор позиционирования $
с драйвером C # 2.0.
Это должно делать то, что вы хотите:
public void UpdateItemTitle(string agendaId, string itemId, string title){
var filter = Builders.Filter.Where(x => x.AgendaId == agendaId && x.Items.Any(i => i.Id == itemId));
var update = Builders.Update.Set(x => x.Items[-1].Title, title);
var result = _collection.UpdateOneAsync(filter, update).Result;
}
Обратите внимание, что ваше предложение Item.Single()
было изменено на Item.Any()
и перешло в определение фильтра.
[-1]
или .ElementAt(-1)
, по-видимому, обрабатывается специально (на самом деле все & lt; 0) и будет заменен позиционным оператором $
.
Вышеупомянутое будет переведено на этот запрос:
db.Agenda.update({ AgendaId: 1, Items.Id: 1 }, { $set: { Items.$.Title: "hello" } })
Вы пытаетесь предоставить доступ к определенной группе пользователей для определенных сообщений в вашей базе данных. Если этот сценарий верен, вы можете достичь этого, используя свои таблицы в базе данных.
Для этого вам нужно настроить некоторые из ваших таблиц, как показано ниже:
Шаг 1:
В вашей таблице сообщений добавьте дополнительный столбец под названием [ 110]
Шаг 2:
Когда пользователь выбирает сообщение как общедоступное, добавьте ключевое слово public
в этот столбец access_level
[ 1125] Шаг 3:
Когда вы запускаете select
запрос, чтобы показать все сообщения, просто запустите where
запрос, подобный этому where access_level = "public"
Если вы хотите показать сообщение для пользователя, нужного вам, тогда вам нужно создать таблицу под названием post_users
user_id
и post_id
являются внешними ключами | id | user_id | post_id |
| 1 | 12 | 22 |
| 2 | 22 | 22 |