Вы можете сделать это, используя конвейер агрегации, но это боль, чтобы написать его самостоятельно.
Вы можете использовать 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
для решения этой точной проблемы.
SELECT IIF(CalculationMethod = x and Price * coefficient < Amount, Amount, Price * coefficient) as CalculatedAmount
FROM aTable
Если у вас есть сценарий типа IF ... THEN ... ELSE, я думаю, что правильным направлением было бы использование оператора CASE, например:
SELECT CASE WHEN CalculationMethod = x AND ((Price * coefficient) < Amount) THEN Amount
ELSE (Price * coefficient) END CalculatedAmount
Вы можете прочитать об этом здесь: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017
An Предложение IIF работает очень хорошо, когда существует только одна ветвь принятия решений, но если вам нужно выбрать несколько вещей из оператора CASE, это путь.