Вы можете сделать это, используя конвейер агрегации, но это боль, чтобы написать его самостоятельно.
Вы можете использовать mongo-join-query
, чтобы автоматически создать конвейер агрегации из вашего запроса.
Так будет выглядеть ваш запрос:
const mongoose = require("mongoose");
const joinQuery = require("mongo-join-query");
joinQuery(
mongoose.models.Comment,
{
find: { pid:444 },
populate: ["uid"]
},
(err, res) => (err ? console.log("Error:", err) : console.log("Success:", res.results))
);
Ваш результат будет иметь пользовательский объект в поле uid
, и вы можете связать столько уровней, сколько хотите. Вы можете заполнить ссылку на пользователя, которая ссылается на команду, которая ссылается на что-то еще и т. Д.
Отказ от ответственности: я написал mongo-join-query
для решения этой точной проблемы.
Использование обработчика событий ItemCheck
является правильным методом для определения, когда пользователь отмечает или снимает отметку с элемента в CheckedListBox
. И да, он также будет срабатывать, когда элемент проверен / снят программно.
Если вы не хотите, чтобы событие запускалось при программной установке / удалении элементов, вы должны удалить обработчик события перед этим.
Предполагая, что ваш обработчик событий выглядит следующим образом:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
Debug.Print("Checked");
}
else if (e.NewValue == CheckState.Unchecked)
{
Debug.Print("Un-Checked");
}
}
Прежде чем устанавливать / сбрасывать элементы программно, вы должны добавить строку:
this.checkedListBox1.ItemCheck -= this.checkedListBox1_ItemCheck;
и после того, как элементы были установлены / сбросить вас в коде, заново добавить обработчик событий с помощью:
this.checkedListBox1.ItemCheck += this.checkedListBox1_ItemCheck;