簡體   English   中英

有沒有辦法在 mongoose 的 find() 中為字段名稱使用變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM