Ai đó biết về các giai đoạn đường ống tổng hợp mongodb có thể giúp tôi không? . Tôi cần chuyển đổi khóa “_id” thành “id” của các đối tượng bên trong một mảng của tài liệu. Vì vậy, tôi cần phải làm điều này
{
"reviews": [
{
"_id": "61e412003c043e620a4ca97d"
},
{
"_id": "61e412153c043e620a4ca983"
},
{
"_id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
trở thành này
{
"reviews": [
{
"id": "61e412003c043e620a4ca97d"
},
{
"id": "61e412153c043e620a4ca983"
},
{
"id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
Tôi quản lý để làm điều này với hai giai đoạn đường ống. addFields [để thêm id] → dự án [để xóa _id] với đầu vào này cho toán tử $addFields
{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
Nó đã làm được điều đó, nhưng phiên bản mongodb sản xuất của tôi, 4. 4. 11, không nhận ra toán tử $setField và nó hiện đang bị hỏng vì điều đó
Thí dụ
Tạo một đối tượng Array Iterator, chứa các khóa của mảng
const trái cây = ["Chuối", "Cam", "Táo", "Xoài"];
const keys = trái cây. phím[];
let text = "";
for [let x of keys] {
text += x + "
";
}
Sử dụng đối tượng tích hợp. keys[] Phương thức
const fruit = ["Chuối", "Cam", "Táo", "Xoài"];
const keys = Đối tượng. phím[trái cây];
let text = "";
for [let x of keys] {
text += x + "
";
}
Định nghĩa và cách sử dụng
Phương thức
{
"reviews": [
{
"id": "61e412003c043e620a4ca97d"
},
{
"id": "61e412153c043e620a4ca983"
},
{
"id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
6 trả về một đối tượng Array Iterator với các khóa của một mảngPhương thức
{
"reviews": [
{
"id": "61e412003c043e620a4ca97d"
},
{
"id": "61e412153c043e620a4ca983"
},
{
"id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
6 không thay đổi mảng ban đầucú pháp
Thông số
Giá trị trả về
TypeDescriptionMột mảngMột đối tượng Array Iterator chứa các khóa của một mảngHỗ trợ trình duyệt
{
"reviews": [
{
"id": "61e412003c043e620a4ca97d"
},
{
"id": "61e412153c043e620a4ca983"
},
{
"id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
6 là một tính năng ECMAScript6 [ES6]ES6 [JavaScript 2015] được hỗ trợ trong tất cả các trình duyệt hiện đại
ChromeEdgeFirefoxSafariOperaCóCóCóCóCó{
"reviews": [
{
"id": "61e412003c043e620a4ca97d"
},
{
"id": "61e412153c043e620a4ca983"
},
{
"id": "61e4127c3c043e620a4ca989"
}
],
"id": "61e411be3c043e620a4ca979"
}
6 không được hỗ trợ trong Internet Explorer 11 [hoặc cũ hơn] Một iterable, chẳng hạn như
{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
0 hoặc {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
1, chứa danh sách các đối tượng. Mỗi đối tượng nên có hai thuộc tính{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
2Một chuỗi hoặc ký hiệu đại diện cho khóa thuộc tính
{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
3Giá trị tài sản
Thông thường, đối tượng này được triển khai dưới dạng một mảng hai phần tử, với phần tử đầu tiên là khóa thuộc tính và phần tử thứ hai là giá trị thuộc tính
Giá trị trả về
Một đối tượng mới có thuộc tính được cung cấp bởi các mục của iterable
Sự mô tả
Phương thức
{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
4 lấy danh sách các cặp khóa-giá trị và trả về một đối tượng mới có các thuộc tính được cung cấp bởi các mục nhập đó. Đối số {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
5 dự kiến sẽ là một đối tượng triển khai phương thức const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
2. Phương thức trả về một đối tượng lặp tạo ra các đối tượng giống như mảng hai phần tử. Phần tử đầu tiên là một giá trị sẽ được sử dụng làm khóa thuộc tính và phần tử thứ hai là giá trị để liên kết với khóa thuộc tính đó{
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
4 thực hiện ngược lại với const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
4, ngoại trừ việc const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
4 chỉ trả về các thuộc tính có khóa chuỗi, trong khi {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
4 cũng có thể tạo các thuộc tính có khóa ký hiệuGhi chú. Không giống như
const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
7, {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
4 không sử dụng giá trị của const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
9, vì vậy việc gọi nó trên một hàm tạo khác sẽ không tạo ra các đối tượng thuộc loại đóví dụ
Chuyển đổi bản đồ thành đối tượng
Với
const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
const obj = Object.fromEntries[arr];
console.log[obj]; // { 0: "a", 1: "b", 2: "c" }
0, bạn có thể chuyển đổi từ {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
1 sang const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
const obj = Object.fromEntries[arr];
console.log[obj]; // { 0: "a", 1: "b", 2: "c" }
2const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
Chuyển đổi một mảng thành một đối tượng
Với
const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
const obj = Object.fromEntries[arr];
console.log[obj]; // { 0: "a", 1: "b", 2: "c" }
0, bạn có thể chuyển đổi từ {
id: "$_id",
reviews: {
$map:
{
input: "$reviews",
as: "review",
in: {
$setField: {
field: "id",
input: "$$review",
value: "$$review._id"
}
}
}
}
}
0 sang const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
const obj = Object.fromEntries[arr];
console.log[obj]; // { 0: "a", 1: "b", 2: "c" }
2________số 8
Các phép biến đổi đối tượng
Với
const arr = [
["0", "a"],
["1", "b"],
["2", "c"],
];
const obj = Object.fromEntries[arr];
console.log[obj]; // { 0: "a", 1: "b", 2: "c" }
0, phương thức đảo ngược của nó là const map = new Map[[
["foo", "bar"],
["baz", 42],
]];
const obj = Object.fromEntries[map];
console.log[obj]; // { foo: "bar", baz: 42 }
4 và các phương thức thao tác mảng, bạn có thể chuyển đổi các đối tượng như thế này