Node.js 在控制台中将NodeJS/MongoDB查询输出为字符串Runnable
在NodeJS中,我有一个带有objectid的聚合MongoDB查询。我只是尝试将查询输出到一个字符串(例如console.log),以便将其复制/粘贴到控制台并手动运行查询 我在查询本身上找不到任何方法,因此我正在管道json上执行console.logNode.js 在控制台中将NodeJS/MongoDB查询输出为字符串Runnable,node.js,mongodb,Node.js,Mongodb,在NodeJS中,我有一个带有objectid的聚合MongoDB查询。我只是尝试将查询输出到一个字符串(例如console.log),以便将其复制/粘贴到控制台并手动运行查询 我在查询本身上找不到任何方法,因此我正在管道json上执行console.log console.log(JSON.stringify(pipeline)); 哪些产出: [{"$match":{"$and":[{"users.userId":{"$eq":{"_bsontype":"ObjectID","id":{"
console.log(JSON.stringify(pipeline));
哪些产出:
[{"$match":{"$and":[{"users.userId":{"$eq":{"_bsontype":"ObjectID","id":{"type":"Buffer","data":[93,151,104,127,56,207,132,25,197,44,232,49]}}}},{"users.userId":{"$eq":{"_bsontype":"ObjectID","id":{"type":"Buffer","data":[93,151,104,127,56,207,132,25,197,44,232,49]}}}}]}}]
这是我希望在控制台中成功运行的结果:
[{"$match":{"$and":[{"users.userId":{"$eq":ObjectId("5d97687f38cf8419c52ce831")}},{"users.userId":{"$eq":ObjectId("5d97687f38cf8419c52ce831")}}]}}]```
问题是ID存储为BSON,显然它有一个不同的序列化程序。如果您希望以与MongoDB命令行兼容的方式对这些数据进行序列化,则需要一个自定义序列化程序来转换ID值 有一个
replacer
功能,您可以将其应用于每个键,我现在无法测试此功能,但我认为这会起作用:
JSON.stringify(pipeline, (k, v) => {
if (k === '$eq') {
return v.toString()
}
return v;
})
这不会直接给你ObjectId(“…”)值(我认为应该可以)。问题是ID存储为BSON,显然有一个不同的序列化程序。如果您希望以与MongoDB命令行兼容的方式对这些数据进行序列化,则需要一个自定义序列化程序来转换ID值 有一个
replacer
功能,您可以将其应用于每个键,我现在无法测试此功能,但我认为这会起作用:
JSON.stringify(pipeline, (k, v) => {
if (k === '$eq') {
return v.toString()
}
return v;
})
这不会直接为您提供
ObjectId(“…”)
值(我认为应该可以)。如果您使用node.js的mongodb的本机客户端
通过节点mongodb客户端的官方文档
()
您可以使用mongodb的“loggerLevel”连接选项来打印查询
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:50000,localhost:50001';
// Database Name
const dbName = 'myproject';
// create a client, passing in additional options
// loggerLevel: debug will print all query on the console
const client = new MongoClient(url, {
poolSize: 10, tls: true
loggerLevel: debug
});
// Use connect method to connect to the server
client.connect(function(err) {
console.log("Connected correctly to server");
});
否则,如果您正在为mongoDB使用任何ORM,例如mongoose(),那么
使用mongoose.set('debug',true)将在控制台上打印查询
const mongoose = require('mongoose')
const { mongo, env } = require('./vars')
// Exit application on error
mongoose.connection.on('error', (err) => {
console.error(`MongoDB connection error: ${err}`)
process.exit(-1)
})
// print mongoose logs in dev env
if (env === 'development') {
mongoose.set('debug', true)
}
/**
* Connect to mongo db
*/
const connect = async () => {
await mongoose.connect(mongo.uri, {
socketTimeoutMS: 60000,
keepAlive: true,
useMongoClient: true,
reconnectTries: 60000,
poolSize: 10
})
return mongoose.connection
}
exports.connect = connect
如果您正在为node.js使用mongodb的本机客户端,那么 通过节点mongodb客户端的官方文档 () 您可以使用mongodb的“loggerLevel”连接选项来打印查询
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:50000,localhost:50001';
// Database Name
const dbName = 'myproject';
// create a client, passing in additional options
// loggerLevel: debug will print all query on the console
const client = new MongoClient(url, {
poolSize: 10, tls: true
loggerLevel: debug
});
// Use connect method to connect to the server
client.connect(function(err) {
console.log("Connected correctly to server");
});
否则,如果您正在为mongoDB使用任何ORM,例如mongoose(),那么
使用mongoose.set('debug',true)将在控制台上打印查询
const mongoose = require('mongoose')
const { mongo, env } = require('./vars')
// Exit application on error
mongoose.connection.on('error', (err) => {
console.error(`MongoDB connection error: ${err}`)
process.exit(-1)
})
// print mongoose logs in dev env
if (env === 'development') {
mongoose.set('debug', true)
}
/**
* Connect to mongo db
*/
const connect = async () => {
await mongoose.connect(mongo.uri, {
socketTimeoutMS: 60000,
keepAlive: true,
useMongoClient: true,
reconnectTries: 60000,
poolSize: 10
})
return mongoose.connection
}
exports.connect = connect