【问题标题】:How to port a JavaScript part of a MongoDB query to PyMongo如何将 MongoDB 查询的 JavaScript 部分移植到 PyMongo
【发布时间】:2014-10-19 13:49:41
【问题描述】:

感谢https://stackoverflow.com/a/26436244/977828,我有以下 MongoDB 查询

var judge = function () {
    var unexpect = "X";
    var letter1 = unexpect, letter2 = unexpect;
    for (var i in this.chr) {
        var chr = this.chr[i];
        if (chr.no == 5) {
            letter1 = chr.letter;
        } else if (chr.no == 6) {
            letter2 = chr.letter;
        }
    }
    if (letter1 != letter2 && letter1 != unexpect && letter2 != unexpect) {
        return true;
    }
    return false;
};

db.sss.find({
    "pos": { "$gte": 200000, "$lt": 2000000 },
    "$where": judge
}, {"x_type":1, "sub_name":1, "name":1, "pos":1, "s_type":1, _id:0});

我尝试将上述查询移植到 PyMongo,但我不知道将 JavaScript 函数放在哪里。

from pymongo import MongoClient

db = MongoClient().test
sDB = db.sss

r = [["Test", "A", "B01", 828288,  1,    7, 'C', 4],
    ["Test", "A", "B01", 828288,  1,    7, 'C', 5],
    ["Test", "A", "B01", 828288,  1,    7, 'T', 6],
    ["Test", "A", "B01", 171878,  3,    8, 'C', 5],
    ["Test", "A", "B01", 171878,  3,    8, 'T', 6],
    ["Test", "A", "B01", 871963,  3,    9, 'A', 5],
    ["Test", "A", "B01", 871963,  3,    9, 'G', 6],
    ["Test", "A", "B01", 1932523, 1,   10, 'T', 4],
    ["Test", "A", "B01", 1932523, 1,   10, 'A', 5],
    ["Test", "A", "B01", 1932523, 1,   10, 'X', 6],
    ["Test", "A", "B01", 667214,  1,   14, 'T', 4],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 5],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 6]]

for i in r:
    sDB.update({'type': i[0],
          'name': i[1],
          'sub_name': i[2],
          'pos': i[3],
          's_type': i[4],
          'x_type': i[5]},
          {"$push": {
              "chr":{
                  "letter":i[6],
                  "no": i[7]} }},
          True)

# var judge = function () {
#     var unexpect = "X";
#     var letter1 = unexpect, letter2 = unexpect;
#     for (var i in this.chr) {
#         var chr = this.chr[i];
#         if (chr.no == 5) {
#             letter1 = chr.letter;
#         } else if (chr.no == 6) {
#             letter2 = chr.letter;
#         }
#     }
#     if (letter1 != letter2 && letter1 != unexpect && letter2 != unexpect) {
#         return true;
#     }
#     return false;
# };

results = sDB.find({
                      "pos": { "$gte": 200000, "$lt": 2000000},
                      "$where": judge
                  },
                  {"x_type":1, "sub_name":1, "name":1, "pos":1, "s_type":1, "_id":0})

for i in results:
    print i

如何将 JavaScript 函数集成到 PyMongo 中?

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    使用 PyMongo,您应该能够将 $where 的 JavaScript 作为字符串传递,例如像这样:

    # JavaScript as multiline string
    judge = """
    function () {
        var unexpect = "X";
        var letter1 = unexpect, letter2 = unexpect;
        for (var i in this.chr) {
            var chr = this.chr[i];
            if (chr.no == 5) {
                letter1 = chr.letter;
            } else if (chr.no == 6) {
                letter2 = chr.letter;
            }
        }
        if (letter1 != letter2 && letter1 != unexpect && letter2 != unexpect) {
            return true;
        }
        return false;
    };
    """
    
    results = sDB.find({
            "pos": { "$gte": 200000, "$lt": 2000000},
            "$where": judge
        },
        {"x_type":1, "sub_name":1, "name":1, "pos":1, "s_type":1, "_id":0})
    

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多