首页 > 解决方案 > MongoDb - 如何以 ObjectId("") 作为值创建有效的 JSON/Javascript 对象?

问题描述

以下是有效的 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'

标签: javascriptjsonmongodbmongodb-queryaggregation-framework

解决方案


您可以使用$toObjectId,将字符串 id 转换为对象 id,

db.persons.aggregate([
  {
    "$match": {
      "$or": [
        { "$expr": { "$eq": ["$_id", { "$toObjectId": "5f3258cfbaaccedaa5dd2c96" }] } }
      ]
    }
  }
])

操场


推荐阅读