如何通过Javascript查询MongoDb中的key:value对?
我已经检查过了,虽然我发现了类似的问题,但我的问题不同,因为我使用的是变量键 我的数据如下:如何通过Javascript查询MongoDb中的key:value对?,javascript,mongodb,meteor,key-value,Javascript,Mongodb,Meteor,Key Value,我已经检查过了,虽然我发现了类似的问题,但我的问题不同,因为我使用的是变量键 我的数据如下: { "_id": "p9AXNCtfX5AWT5jRw", "chr": "1", "cousins": [ "B1KLeIiQE", "H195r77hQ4", "rkFnSX7n74", "H8P6QcQXX" ], "end": { "B1KLeIiQE": 26384690, "H195r77hQ4": 25029488,
{
"_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
}
}
通过gDoc很容易访问JS中的2个对应键:value objectsstart和end。start[kitUser]
其中kitUser将是上述cosins数组中的4个字符串中的任意一个
因此,通过终端查询上述文件将是:
db.groups.find({
cousins: "B1KLeIiQE",
chr: "1",
"start.B1KLeIiQE": {
$lte: 35000000
},
"end.B1KLeIiQE": {
$gte: 1
}
})
然后我将相应的键'b1kleiqe'转换为开始的值18683049和结束的值26384690
但是,我无法使上述查询在Javascript中工作,因为我无法以灵活的方式解析要查询的字段(这意味着包含键必须生成“start.b1kleiqe”和“end.b1kleiqe”的任何值)
我当前(失败)的代码如下所示:
我也不能在这两个key:value对象上创建索引(因为每个索引有1024字节的限制,我有一个文档有1853字节),但是我在cousins和chr上有一个复合索引,它在应用过滤器之前缩小了结果范围
我确实喜欢2个key:value对象的简单结构,但我愿意接受更改该格式的建议,以便可以在Javascript(Meteor)中运行查询。如果代码中存在语法错误,请尝试以下方法:
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,这是一个非常创新的解决方案,它工作得非常完美!
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();