[英]Is there a way to use a variable for the field name in a find() in mongoose?
假設您有一個很長的通用函數要在多個架構上使用,並且每個架構對於您查詢的字段都有不同的名稱(可能還有不同類型的值——字符串、數字等)
function foo (field, value){
Model.find({field: value});
}
foo('idfoo', 'xx');
foo('idbar', 5);
我試圖做這樣的事情作為貓鼬中的概念證明,它似乎只有在您使用變量作為值時才有效,但不能用於字段。
這是不可能的嗎?
只需將變量放入 []
function foo (field, value){
Model.find({[field]: value});
}
foo('idfoo', 'xx');
foo('idbar', 5);
您可以使用內置的where
函數,從而無需調用您顯示的函數:
Model.find().where(fieldName, value).exec(function(err, results) { });
你可以通過鏈接做不止一個:
Model.find().where(field1, val1).where(field2, val2).exec(...)
它也可以很豐富,支持嵌套屬性和其他操作符:
Model.find().where('orders.total').gt(1500).exec(...)
function foo(field, value) {
var query = {};
query[field] = value;
Model.find(query)...
}
如果要按通用字段搜索,請嘗試以下代碼
import { Request, Response } from "express";
import Client from "../models/client";
const search = async (req: Request, res: Response) => {
try {
const keyword = req.query.keyword || "";
const field: any = req.query.field || "email"; // default field
let clients = await Client.find(
{ [field]: { $regex: ".*(?i)" + keyword + ".*" } },
);
if (clients?.length) {
res.status(200).send(clients);
} else {
res.status(200).send("no match");
}
} catch (error) {
res.status(500).send(error.message);
}
};
export default {
search,
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.