Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在控制台中将NodeJS/MongoDB查询输出为字符串Runnable_Node.js_Mongodb - Fatal编程技术网

Node.js 在控制台中将NodeJS/MongoDB查询输出为字符串Runnable

Node.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":{"

在NodeJS中,我有一个带有objectid的聚合MongoDB查询。我只是尝试将查询输出到一个字符串(例如console.log),以便将其复制/粘贴到控制台并手动运行查询

我在查询本身上找不到任何方法,因此我正在管道json上执行console.log

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