【问题标题】:How to query a key:value pair in MongoDb via Javascript?如何通过Javascript在MongoDb中查询键:值对?
【发布时间】:2020-02-01 14:29:36
【问题描述】:

我已经检查过了,尽管我发现类似的问题与我使用的变量键不同。

我的数据如下:

{
  "_id": "p9AXNCtfX5AWT5jRw",
  "chr": "1",
  "cousins": [
    "B1KLeIiQE",
    "H195r77hQ4",
    "rkFnSX7n74",
    "H8P6QcQXX"
  ],
  "end": {
    "B1KLeIiQE": 26384690,
    "H195r77hQ4": 25029488,
    "rkFnSX7n74": 26384690,
    "H8P6QcQXX": 25224010
  },
  "numCousins": 4,
  "start": {
    "B1KLeIiQE": 18683049,
    "H195r77hQ4": 18643577,
    "rkFnSX7n74": 18650794,
    "H8P6QcQXX": 18643577
  }
}

在 JS 中通过gDoc.start[kitUser] 访问 2 个对应的 key:value 对象 startend 很容易,其中 kitUser 将是任何一个上面 cousins 数组中的 4 个字符串。

因此,例如通过终端查询上述文档将是:

db.groups.find({
  cousins: "B1KLeIiQE",
  chr: "1",
  "start.B1KLeIiQE": {
    $lte: 35000000
  },
  "end.B1KLeIiQE": {
    $gte: 1
  }
})

然后我会将相应的密钥“B1KLeIiQE”转换为 start 的值 18683049 和 end 的 26384690。

但是,我无法让上述查询在 Javascript 中工作,因为我无法以灵活的方式解析要查询的字段(意味着包含生成“start.B1KLeIiQE”和“ end.B1KLeIiQE')。

我当前的(失败的)代码如下所示):

const chr = '1';
const start = 1;
const end = 35000000;
const groupsArray = Groups.find({ chr, 'start.kitUser': { $lte: end }, 
'end.kitUser': { $gte: start }, cousins: kitUser }).fetch();

我也无法在这 2 个 key:value 对象上创建索引(因为每个索引有 1024 个字节的限制,并且我有 1 个文档有 1853 个字节)但我确实在 上有一个复合索引cousinschr 在应用过滤器之前缩小结果。

我确实喜欢 2 个 key:value 对象的简单结构,但我愿意接受更改该格式的建议,以便我可以在 Javascript (Meteor) 中运行查询。

【问题讨论】:

    标签: javascript mongodb meteor key-value


    【解决方案1】:

    你的代码有语法错误,试试这个:

    const chr     = '1';
    const start   = 1;
    const end     = 35000000;
    const kitUser = 'B1KLeIiQE';
    const query   = {};
    query['chr']  = chr;
    query['start.' + kitUser]  = { '$lte': end };
    query['end.' + kitUser]  = { '$gte: start }; 
    query['cousins']  = kitUser;
    const groupsArray = Groups.find(query).fetch();
    

    【讨论】:

    • 非常感谢@Valijon,这是一个非常创新的解决方案,而且效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多