【问题标题】:Building a dynamic mongo query for meteor为流星构建动态 mongo 查询
【发布时间】:2014-07-17 13:33:00
【问题描述】:

我正在构建一个具有可点击“过滤器”的应用;我正在创建一个要传递给 mongo 'find' 的对象列表(?),以便在所选属性与某个分数匹配时提取列表。

我的数据结构如下(sn-p):

    name: 'Entry One',
    location: {
      type: 'Point',
      coordinates: [-5.654182,50.045414]
    },
    dogs: {
      score: '1',
      when: 'seasonal',
      desc: 'Dogs allowed from October to April'
    },
    lifeguard: {
      score: '1',
      when: 'seasonal',
      desc: 'A lifeguard hut is manned between April and October',
      times: ''
    },
    cafe: {
      score: '1',
      name:'Lovely cafe',
      open:'seasonal'
    }, ...

我的搜索变量是我分配给会话变量的对象列表(我认为?)。如果我通过 JSON.stringify 输出这个会话 var ('searchString'),它看起来像这样:

{"cafe":{"score":"1"},"dogs":{"score":"1"}} 

我想将此传递给我的 mongo find,以便它仅列出与这些属性上的这些分数匹配的条目,但它返回零结果。我需要以某种方式将其设为$and 查询吗?

目前看起来是这样的:

Beaches.find(searchString);

不幸的是,一旦我将 searchString 放入查找中,即使它是空的 {},我也会得到零结果。 (当它只是一个find()时,条目列表很好,所以数据本身就可以了)

我做错了什么?我对 mongo/meteor 还比较陌生,所以如果这是显而易见的事情,我提前道歉!

【问题讨论】:

标签: mongodb meteor mongodb-query


【解决方案1】:

不要对查询进行字符串化。而是将对象展平。示例:

Beaches.find({
  "cafe.score": 1,
  "dogs.score": 1,
});

【讨论】:

  • 感谢 Hubert,您的解决方案在控制台中有效!我应该为我的 searchString 构建一个数组而不是对象吗? join(),而不是构建一个对象来展平它?
  • 实际上,您的示例看起来正在运行,但它返回一个空结果集。我认为这可能是因为我的数据将分数存储为字符串,而您的示例正在寻找数字,但没有骰子。我会深入挖掘。
  • 我尝试构建一个数组并将其加入一个字符串以传递给 find,并将查询对象也直接传递给 find,但都不起作用!我的查询对象看起来是正确的,当我在控制台中输入等效查询时,我得到了我期望的结果,但是一旦我传入我存储的对象,我什么也得不到。非常令人沮丧!
  • 你能console.log你作为查询传递的对象并发布结果吗?
  • 当然,我一直都在,我应该贴出来的!好的,所以我目前正在尝试的工作看起来像这样:Object {'cafe.score': 1}
猜你喜欢
  • 2016-08-28
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2012-12-21
  • 2018-12-21
相关资源
最近更新 更多