【发布时间】:2019-12-02 05:55:28
【问题描述】:
我正在尝试转换一个字符串以在 mongodb 中使用,但失败了。
let pipeline = JSON.parse('[{"$match": {"_id": ObjectId("5b5637acbd3e9c2068ef80c3")}]');
// results in "SyntaxError: Unexpected token O in JSON at position 20"s
let pipeline = JSON.parse('[{"$match": {"_id": "5b5637acbd3e9c2068ef80c3"}]');
let response = await db.collect('<collection_name>').aggregate(pipeline).toArray();
// returns [] parse works but mongodb doesn't return any rows!
// This works but its not the solution I am looking for.
let pipeline = [{"$match": {"_id": ObjectId("5b5637acbd3e9c2068ef80c3")}];
let response = await db.collect('<collection_name>').aggregate(pipeline).toArray();
我尝试使用 BSON 类型,但没有成功。
我目前的工作是从字符串中删除 ObjectId() 并使用带有 JSON.parse 的 Reviver 函数
const ObjectId = require('mongodb').ObjectID;
let convertObjectId = function (key,value){
if (typeof value === 'string' && value.match(/^[0-9a-fA-F]{24}$/)){
return ObjectId(value);
} else {
return value;
};
}
let pipeline = JSON.parse('[{"$match": {"_id": "5b5637acbd3e9c2068ef80c3"}]',convertObjectId);
let response = await db.collect('<collection_name>').aggregate(pipeline).toArray();
// returns one record.
【问题讨论】:
-
[{"$match": {"_id": ObjectId("5b5637acbd3e9c2068ef80c3")}]不是有效的 json。从here查看它 -
请问你为什么要解析它。
-
这个练习的目的是让我可以通过 API / req.body 传递一个 mongodb 管道。我正在编写一个基于浏览器的工具来处理 mongodb 聚合(因为我已经厌倦了 Studio 3T)