Làm cách nào để chuyển đổi ObjectId thành chuỗi trong tập hợp MongoDB?

Làm cách nào để chuyển đổi id đối tượng của tôi thành chuỗi để tôi có thể so sánh nó với chuỗi trong $eq. phiên bản mongo - 4. 0

db.user.aggregate([{ 
 $lookup:{
     from: "sometable",
     let:{user:["$_id"]},
                         pipeline:[{ 
                                $match: {
                                    $expr: {
                                        $and:[
                                            {
                                                $eq: [ "$userId", "$$user"]
                                              },
                                            {
                                                $gt: [ "$lastBalance", 0]
                                              }
                                            ]
                                           }
                                        }
                            }
                            ],
     as: "response"
  },
}])
- stackoverflow. com

ghi bàn. 6

câu trả lời được chấp nhận

Bạn có thể sử dụng $toString,

$eq: [ "$userId", {$toString: "$$user"}]

ghi bàn. 0

Bạn cũng có thể thử điều này

$eq: [ {$toObjectId: "$$userId", "$user"}]

Tôi không biết tại sao nhưng có vẻ như so sánh objectId nhanh hơn

Thêm câu hỏi với thẻ tương tự

Trong cơ sở dữ liệu MongoDB của chúng tôi, chúng tôi có các bộ sưu tập riêng biệt có tham chiếu đến các bộ sưu tập khác (IE bộ sưu tập hóa đơn của chúng tôi chỉ có tham chiếu ObjectId mà nó được gửi tới ứng dụng khách thay vì giữ nhiều bản sao của ứng dụng khách bên trong hóa đơn)

Chúng tôi đang kết nối với MongoDB từ Microsoft PowerBI bằng Apache Drill và trình điều khiển ODBC của nó. Để thực hiện công việc này, tôi đã tạo một số chế độ xem đơn giản như chế độ xem sau để làm phẳng dữ liệu của tôi để hoạt động với Drill

db. runCommand( {tạo.
    "Ánh xạ bên tín dụng",
    viewOn. "yggdrasilconfiguration",
    đường dẫn. [
    {$thư giãn. '$CreditorsMapping'},
    {$project. {
      _id. 1,
        Id tổ chức. '$OrganizationId',
        PrimaryId. '$CreditorsMapping. PrimaryId',
        ID Bên được chi trả. '$CreditorsMapping. CreditorId',
        ApplicationId. '$CreditorsMapping. ApplicationId'
    },
    {$match. {Id chính. {$ne. ""}}}
]
})

_id, Id tổ chức và Id ứng dụng là ObjectId. Vấn đề là Drill không thể tham gia vào ObjectId's và PowerBI không chấp nhận dữ liệu nhị phân làm tham chiếu, vì vậy tôi không thể tham gia dữ liệu giữa các bộ sưu tập khác nhau. Có thể chuyển đổi ObjectId thành chuỗi, nhưng mọi nỗ lực của tôi đều thất bại

Tôi đã thử những cách tiếp cận này nhưng không có kết quả

db. getCollection('yggdrasilconfiguration'). tổng hợp([
    {$unwind. '$CreditorsMapping'},
    {$project. {
      _id. 0,
        Id tổ chức. '$OrganizationId',
        ToStringedOrganizationId. '$OrganizationId'. toString(),
        StrOrganizationId. '$OrganizationId'. str,
        TojsonOrganizationId. tojson('$OrganizationId'),
        PrimaryId. '$CreditorsMapping. PrimaryId',
        ID Bên được chi trả. '$CreditorsMapping. CreditorId',
        ApplicationId. '$CreditorsMapping. ApplicationId'}
    },
    {$match. {Id chính. {$ne. ""}}}
])

Ở đây tôi sử dụng phương thức toString(),. hậu tố str và phương thức tojson() trên OrganizationId, nhưng kết quả của việc này trông như thế này

{
    "Id tổ chức". ObjectId("542d53fc669a710728349cc8"),
    "ToStringedOrganizationId". ObjectId("542d53fc669a710728349cc8"),
    "StrOrganizationId". không xác định,
    "TojsonOrganizationId". "\"$OrganizationId\"",
    "PrimaryId". "915568",
    "CreditId". "7626",
    "ApplicationId". ObjectId("542e5dca669a7107d8ac1da5")
}

Có thể làm những gì tôi muốn?

Từ MongoDB 4. 0, bạn có thể sử dụng toán tử đường dẫn tổng hợp $toString để chuyển đổi giá trị thành chuỗi

Ví dụ

Giả sử chúng ta có một bộ sưu tập tên là types và nó chứa tài liệu sau

{
	"_id" : ObjectId("60123a54c8eb4369cf6ad9d6"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75")
}

Chúng ta có thể sử dụng toán tử $toString để chuyển đổi tất cả các loại đó thành một chuỗi. Nếu đầu vào là một chuỗi, thì nó chỉ trả về chuỗi

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          objectId: { $toString: "$_id" },
          double: { $toString: "$double" },
          string: { $toString: "$string" },
          boolean: { $toString: "$boolean" },
          date: { $toString: "$date" },
          integer: { $toString: "$integer" },
          long: { $toString: "$long" },
          decimal: { $toString: "$decimal" }
        }
    }
  ]
).pretty()

Kết quả

{
	"objectId" : "60123a54c8eb4369cf6ad9d6",
	"double" : "123.75",
	"string" : "123",
	"boolean" : "true",
	"date" : "2020-12-31T23:30:15.123Z",
	"integer" : "123",
	"long" : "123",
	"decimal" : "123.75"
}

lỗi

Nếu bạn gặp lỗi, hãy thử sử dụng toán tử

$eq: [ "$userId", {$toString: "$$user"}]
1 thay vì $toString. Toán tử
db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          objectId: { $toString: "$_id" },
          double: { $toString: "$double" },
          string: { $toString: "$string" },
          boolean: { $toString: "$boolean" },
          date: { $toString: "$date" },
          integer: { $toString: "$integer" },
          long: { $toString: "$long" },
          decimal: { $toString: "$decimal" }
        }
    }
  ]
).pretty()
0 cho phép bạn xử lý lỗi mà không ảnh hưởng đến toàn bộ hoạt động tổng hợp

Toán tử $toString tương đương với việc sử dụng toán tử

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          objectId: { $toString: "$_id" },
          double: { $toString: "$double" },
          string: { $toString: "$string" },
          boolean: { $toString: "$boolean" },
          date: { $toString: "$date" },
          integer: { $toString: "$integer" },
          long: { $toString: "$long" },
          decimal: { $toString: "$decimal" }
        }
    }
  ]
).pretty()
0 để chuyển đổi một giá trị thành một chuỗi

Làm cách nào để chuyển đổi ObjectId thành chuỗi trong MongoDB tổng hợp?

toString() method để chuyển đổi ObjectId của bạn thành chuỗi. Trước tiên, bạn khớp và chiếu ObjectID của mình. Sau đó, bạn có thể chuyển đổi ID đối tượng này thành chuỗi bằng cách sử dụng ObjectID. toString().

Làm cách nào để chuyển đổi ID đối tượng thành chuỗi?

Trong Mongoose, bạn có thể sử dụng phương thức toString() trên ObjectId để lấy chuỗi thập lục phân 24 ký tự

Làm cách nào để chuyển đổi UUID thành chuỗi trong MongoDB?

UUID(). toString() sẽ cung cấp một chuỗi chứa UUID("00000000-0000-0000-0000-00000000000"). split('"') sẽ chia chuỗi, chia cho dấu ngoặc kép, thành một mảng, đó là ['UUID(', '00000000-0000-0000-0000-000000000000', ')'].

Làm cách nào để chuyển đổi int thành chuỗi trong MongoDB?

forEach( function(x) { x. tên = x. tên. toNumber(). toString();