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. comghi 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ợpToá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