Object Operators¶
ObjectOperators đại diện cho nhóm toán tử thao tác object trong MongoDB: $getField, $setField, $mergeObjects, $objectToArray. Nó cung cấp các static method và builder giúp bạn tạo biểu thức từ field, AggregationExpression hoặc system variables (ví dụ: $$CURRENT), tránh phải viết BSON thủ công.
import { ObjectOperators } from 'red-aggregation/operator/objectOperators/objectOperators';
Phương thức¶
- ObjectOperators.valueOf()
- ObjectOperators.setValueTo()
- ObjectOperators.mergeObject()
- ObjectOperators.mergeValueOf()
- factory.merge()
- factory.mergeWith()
- factory.mergeWithValuesOf()
- factory.toArray()
- factory.getField()
- factory.setField()/removeField()
ObjectOperators.valueOf()¶
Khởi tạo factory từ field reference hoặc system variable (ví dụ $$CURRENT), sau đó chain tới toán tử mong muốn.
// Field reference
ObjectOperators.valueOf('profile')
.getField('name')
.of('profile')
.toDocument(context);
// => { $getField: { field: 'name', input: '$profile' } }
Hoặc (system variable):
ObjectOperators.valueOf('$$CURRENT')
.setField('status')
.toValue('active')
.toDocument(context);
// => { $setField: { field: 'status', input: '$$CURRENT', value: 'active' } }
ObjectOperators.setValueTo()¶
Shortcut để set một field vào $$CURRENT.
ObjectOperators.setValueTo('flag', true).toDocument(context);
// => { $setField: { field: 'flag', input: '$$CURRENT', value: true } }
ObjectOperators.mergeObject()¶
Tạo $mergeObjects từ literal/object/expression.
ObjectOperators.mergeObject({ a: 1 }).mergeWith({ b: 2 }).toDocument(context);
// => { $mergeObjects: [{ a: 1 }, { b: 2 }] }
ObjectOperators.mergeValueOf()¶
Ghép nhiều field hoặc expression vào $mergeObjects.
ObjectOperators.mergeValueOf('a', 'b').toDocument(context);
// => { $mergeObjects: ['$a', '$b'] }
ObjectOperators.mergeValueOf({ $toObjectId: '$id' }).toDocument(context);
// => { $mergeObjects: [{ $toObjectId: '$id' }] }
factory.merge()¶
ObjectOperators.valueOf('base').merge().mergeWith({ extra: true }).toDocument(context);
// => { $mergeObjects: ['$base', { extra: true }] }
factory.mergeWith() / mergeWithValuesOf()¶
ObjectOperators.valueOf('base')
.mergeWith({ a: 1 })
.mergeWith({ b: 2 })
.toDocument(context);
// => { $mergeObjects: ['$base', { a: 1 }, { b: 2 }] }
ObjectOperators.valueOf('base')
.mergeWithValuesOf('a', 'b')
.toDocument(context);
// => { $mergeObjects: ['$base', '$a', '$b'] }
factory.toArray()¶
Chuyển object thành mảng key/value ($objectToArray).
ObjectOperators.valueOf('doc').toArray().toDocument(context);
// => { $objectToArray: '$doc' }
factory.getField()¶
Dựng $getField rồi chỉ định input bằng .of(...).
ObjectOperators.valueOf('doc')
.getField('name')
.of('doc')
.toDocument(context);
// => { $getField: { field: 'name', input: '$doc' } }
factory.setField() / removeField()¶
Thêm hoặc xóa field bằng $setField (xóa dùng $$REMOVE).
// Set
ObjectOperators.valueOf('doc')
.setField('age')
.toValue(30)
.toDocument(context);
// => { $setField: { field: 'age', input: '$doc', value: 30 } }
// Remove
ObjectOperators.valueOf('doc')
.removeField('age')
.toDocument(context);
// => { $setField: { field: 'age', input: '$doc', value: '$$REMOVE' } }
Lưu ý sử dụng¶
ObjectOperators.valueOf(...)chấp nhận field reference hoặc system variable hợp lệ (ví dụ$$CURRENT).removeField(name)sử dụng giá trị đặc biệt$$REMOVEđể xóa field trong$setField.ObjectToArray.valueOfToArray(...)/ObjectOperatorFactory.toArray()ném lỗi khi input null (theo kiểm traAssert.notNull).mergeValueOf()vàmergeWithValuesOf()cho phép trộn field reference và expression; nếu có string, chúng được chuẩn hóa sang field reference trước khi merge.