使用多种条件从tarantool中选择

问题描述

如何在一个空间同时包含两个或多个字段的条件下进行选择? 我没有在文档中找到示例。

解决方法

有两种方法可以执行此操作:使用SQL或使用较低级别的lua API。

第一个要求您设置空间格式(请参见here)。看起来像这样:

box.space.myusers:format({{name='id',type='number'},{name='first_name',type='string'},{name='last_name',type='string'}})

这是SQL确定列名所必需的。然后,您可以按以下方式查询它:

box.execute([[SELECT "id" FROM "myusers" WHERE "first_name"='John' AND "last_name"='Doe';]])

从同一空间中选择的另一种方法是:

user_ids = {}
for_,user in box.space.myusers.index.first_name:pairs("John") do
    if user.last_name == "Doe" then
        table.insert(user_ids,user.id)
    end
end

请查看here,以获取有关低级空间API的更多详细信息。

,

或者您可以编写自定义的“过滤器”功能,而不是在“ if”下编写其他条件。并以以下方式使用它:

例如,您具有以下架构:

#!/bin/bash
for index in {1..100} # I do this script on 100 files,that is s why I use for loop
do
awk '
    BEGIN { FS = "MGD" }
    $2 >= 1 && $2 <= 225 { layer1[$1]++ }
    $2 >= 676 && $2 <= 900 { layer2[$1]++ }
    END {
        for (sql in layer1) {
        if (layer1[sql] == 1 && layer2[sql] == 1)
            ++total
    }
    print total
    }
' eq5_15_333_lipid_sol_fragment_$index.ndx >> vertical_water_bridges.txt 
done