簡體   English   中英

MongoDB $和查詢不適用於變量查詢字符串

[英]MongoDB $and query not working with variable query-string

我正在使用MongoDB $and $lt$gt結合使用,如下所示:

  var queryString0 = 'data.' + req.body.data[0].keyname;

  console.log(queryString0);
  //Prints 'data.price'

  Company.find({ $and : [{ queryString0 : { $lt : 200, $gt : 100}}]}, {name: 1, queryString0 : 1} , function(err, result) {
    if (err) {
      throw err;
    }

    res.send(result);

  });

問題是,當我使用queryString0檢索數據時,這不會給我任何結果,但是,如果我使用這樣的靜態字符串,它將給我所需的結果:

  var queryString0 = 'data.screener.' + req.body.data[0].keyname;

  console.log(queryString0);
  //Prints 'data.price'

  Company.find({ $and : [{ 'data.price' : { $lt : 200, $gt : 100}}]}, {name: 1, 'data.price' : 1} , function(err, result) {
    if (err) {
      throw err;
    }

    res.send(result);

  });

這對我來說沒有任何意義,因為在兩種情況下都應提供相同的查詢字符串。

請幫助我弄清楚我的代碼有什么問題。

編輯 :我使用$and的原因是因為我還將需要檢查是否幾個字段匹配我的其他條件,像這樣:

  var queryString0 = 'data.screener.' +req.body.data[0].keyname;
  var queryString1 = 'data.screener.' +req.body.data[1].keyname;

  Company.find({ $and : [
    {queryString0 : {$lt : req.body.data[0]["max"], $gt : req.body.data[0]["min"]}},
    {queryString1 : {$lt : req.body.data[1]["max"], $gt : req.body.data[1]["min"]}}
  ] },{ name : 1, queryString0 : 1, _id : 0 }, function(err, result) {
    if (err) {
      throw err;
    }

    res.send(result);

  })

您從正確的概念開始,我在代碼中構造了一些東西,但是忘記了JavaScript也會“字符串化”對象鍵。 因此,對此有不同的表示法。

另外,您也不需要$and這里的所有:

var queryString0 = 'data.screener.' + req.body.data[0].keyname;

var query = {};
query[querystring0] = { $lt : 200, $gt : 100};

var projection = { name: 1 };
projection[querystring0] = 1;

Company.find(query,projection,function(err,result) {
   // work in here
});

因此,“方括號”表示法是如何使用變量內容作為鍵的名稱。 而且,“所有” MongoDB查詢參數無論如何都是“和”條件,因此,除非對同一字段需要“兩個”或更多條件,否則幾乎不需要用$and將它們包裝起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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