【发布时间】:2020-12-10 17:14:58
【问题描述】:
以下是有效的 MongoDb 查询:
db.persons.aggregate([{
"$match": {
"$or": [{
"$expr": {
"$eq": ["$_id", ObjectId("5f3258cfbaaccedaa5dd2c96")]
}
}]
}
}])
但是这里的问题是我无法创建一个有效的 JavaScript 对象,如下所示:
[{
"$match": {
"$or": [{
"$expr": {
"$eq": ["$_id", ObjectId("5f3258cfbaaccedaa5dd2c96") ]
}
}]
}
}
}]
因为ObjectId("5f3258cfbaaccedaa5dd2c96" 既不是字符串也不是数字。
我需要一个有效的 javascript 对象,因为我想将它存储在某处并即时获取并执行,我该怎么做?
编辑: 我在节点中尝试了以下内容:
var mquery=[
{
"$match": {
"$or": [
{
"$expr": {
"$eq": [
"$_id",
{
"$oid": "5f3258cfbaaccedaa5dd2c96"
}
]
}
}
]
}
}
];
const result = await this.db.collection("persons").aggregate(mquery).toArray();
并得到:
MongoError: Unrecognized expression '$oid'
【问题讨论】:
-
你不能在你的情况下只存储对象 ID (5f3258cfbaaccedaa5dd2c96),然后动态生成其余的查询吗?
-
ObjectId("5f3258cfbaaccedaa5dd2c96") 是否有某种 toString 方法
-
首先,特定查询可能很简单: db.persons.find({_id: ObjectId('5f3258cfbaaccedaa5dd2c96')}) 。其次,您需要将其存储为 JSON 吗?因为您可以使用 BSON 序列化查询对象;或者您需要指定自己的 JSON 编码器来序列化 ObjectId('123') -> { $oid: '123' }
-
我正在编写一个简单的查询生成器。 mongo db 查询是动态生成的。问题是如何务实地创建查询?我的意思是我可以毫无问题地写
{ "$eq": ["$phone", "342355" ] },但我不能写{ "$eq": ["$_id", ObjectId("5f3258cfbaaccedaa5dd2c96") ] } -
查询本来可以使用 find() ,但这是我实际需要的简单版本。所以我确实需要聚合
标签: javascript json mongodb mongodb-query aggregation-framework