isexdpac |
| 程序员 • isexdpac 写了一个分布式端口指纹扫描服务 2023 年 7 月 6 日 • 最后回复来自 isexdpac | 2 |
| 电动汽车 • isexdpac 有没有换过特斯拉卡钳的兄弟 2023 年 4 月 25 日 |
| Python • isexdpac 写了一个简单网络自动化运维服务,后期会新增更多的自动化动能 2023 年 4 月 24 日 • 最后回复来自 isexdpac | 2 |
isexdpac 最近回复了
| 回复了 yaott2020 创建的主题 › 感觉 rust 门槛太高了2023 年 7 月 25 日 |
是很难,生命周期,所有权,智能指针等等..... 后面还有更难的异步 async
| 回复了 fy1206 创建的主题 › 用 go 怎么执行 mongo 的脚本文件2023 年 7 月 24 日 |
@fy1206 mongo 版本 4.0.21
| 回复了 fy1206 创建的主题 › 用 go 怎么执行 mongo 的脚本文件2023 年 7 月 21 日 |
script.txt 脚本文件:
db.file.insertOne({"name":"test1","age":10})
db.file.insertOne({"name":"test2","age":11})
db.file.insertOne({"name":"test3","age":12})
db.file.find({name:"test2"})
代码:
package http
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"os"
"strings"
"testing"
"time"
)
func TestRunMongoFile(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
clientOptions := options.Client().ApplyURI("mongodb://admin:[email protected]:27017")
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
t.Fatal(err)
}
err = client.Ping(ctx, nil)
if err != nil {
t.Fatal(err)
}
database := client.Database("test")
fileContent, err := os.ReadFile("./script.txt")
if err != nil {
t.Fatal(err)
}
commands := strings.Split(string(fileContent), "\n")
for _, cmd := range commands {
if len(cmd) == 0 {
continue
}
var result bson.M
err = database.RunCommand(ctx, bson.D{{"eval", cmd}}).Decode(&result)
if err != nil {
t.Fatal(err)
}
fmt.Println(result)
}
}
我测试了下没啥问题,不知道是不是你要的效果,不过如果文件里执行 sql 多的话,context.WithTimeout 时间要改大一点
db.file.insertOne({"name":"test1","age":10})
db.file.insertOne({"name":"test2","age":11})
db.file.insertOne({"name":"test3","age":12})
db.file.find({name:"test2"})
代码:
package http
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"os"
"strings"
"testing"
"time"
)
func TestRunMongoFile(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
clientOptions := options.Client().ApplyURI("mongodb://admin:[email protected]:27017")
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
t.Fatal(err)
}
err = client.Ping(ctx, nil)
if err != nil {
t.Fatal(err)
}
database := client.Database("test")
fileContent, err := os.ReadFile("./script.txt")
if err != nil {
t.Fatal(err)
}
commands := strings.Split(string(fileContent), "\n")
for _, cmd := range commands {
if len(cmd) == 0 {
continue
}
var result bson.M
err = database.RunCommand(ctx, bson.D{{"eval", cmd}}).Decode(&result)
if err != nil {
t.Fatal(err)
}
fmt.Println(result)
}
}
我测试了下没啥问题,不知道是不是你要的效果,不过如果文件里执行 sql 多的话,context.WithTimeout 时间要改大一点
| 回复了 fy1206 创建的主题 › 用 go 怎么执行 mongo 的脚本文件2023 年 7 月 21 日 |
package main
import (
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"io/ioutil"
)
func main() {
// 建立 MongoDB 会话,连接到数据库(同步代码)
session, err := mgo.Dial("mongodb://localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
db := session.DB("your_database_name")
// 读取脚本文件内容
script, err := ioutil.ReadFile("your_script_file.js")
if err != nil {
panic(err)
}
// 执行脚本文件
result := bson.M{}
err = db.Run(bson.M{"eval": string(script)}, &result)
if err != nil {
panic(err)
}
// 处理脚本执行结果
// ...
}
在上面的代码中,我们首先建立了一个 MongoDB 会话并连接到数据库。然后,我们使用 ioutil 包读取脚本文件的内容,并使用 db.Run 方法执行脚本文件。db.Run 方法的第一个参数是一个包含脚本的 bson.M 类型的 map ,键为"eval",值为脚本内容的字符串。第二个参数是用于接收脚本执行结果的变量。脚本执行结果通常是一个包含查询结果的 map 。
请注意替换上面代码中的 your_database_name 为你要连接的 MongoDB 数据库的名称,并将 your_script_file.js 替换为你要执行的脚本文件路径。
import (
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"io/ioutil"
)
func main() {
// 建立 MongoDB 会话,连接到数据库(同步代码)
session, err := mgo.Dial("mongodb://localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
db := session.DB("your_database_name")
// 读取脚本文件内容
script, err := ioutil.ReadFile("your_script_file.js")
if err != nil {
panic(err)
}
// 执行脚本文件
result := bson.M{}
err = db.Run(bson.M{"eval": string(script)}, &result)
if err != nil {
panic(err)
}
// 处理脚本执行结果
// ...
}
在上面的代码中,我们首先建立了一个 MongoDB 会话并连接到数据库。然后,我们使用 ioutil 包读取脚本文件的内容,并使用 db.Run 方法执行脚本文件。db.Run 方法的第一个参数是一个包含脚本的 bson.M 类型的 map ,键为"eval",值为脚本内容的字符串。第二个参数是用于接收脚本执行结果的变量。脚本执行结果通常是一个包含查询结果的 map 。
请注意替换上面代码中的 your_database_name 为你要连接的 MongoDB 数据库的名称,并将 your_script_file.js 替换为你要执行的脚本文件路径。
| 回复了 fy1206 创建的主题 › 用 go 怎么执行 mongo 的脚本文件2023 年 7 月 21 日 |
这种问题还有比 GPT 在行的吗。。
| 回复了 rabt 创建的主题 › 听说 ml 域名被收回了?你们的还能用吗2023 年 7 月 21 日 |
美国负全责
| 回复了 moonrailgun 创建的主题 › 失业在家的一月半,我在家全职做开源2023 年 7 月 18 日 |
已 star op 加油
| 回复了 isexdpac 创建的主题 › 写了一个分布式端口指纹扫描服务2023 年 7 月 14 日 |
@retanoj 有不少开源的指纹识别的思路可以参考呀,还有 fofa ,暂时没接入
| 回复了 brader 创建的主题 › 逐字返回的内容如何做关键词屏蔽2023 年 7 月 6 日 |
@mrleft 笑出声