[MONGODB] 사용자 정의 함수는 열 MongoDB를 투사을 계산
MONGODB사용자 정의 함수는 열 MongoDB를 투사을 계산
나는 컬렉션의 열에 대한 사용자 정의 기능을 사용하여 계산 열을 얻기 위해 프로젝션을 사용하려고하지만 난 그것을 수행하는 방법 방법 그림에는 지원되지 않았 음. 내가 할 수있는 것은 이것이다 :
db.collection.aggregate([$project:{column1:1, calculatedCol: {$literal:[ jaro_Winkler("how to access column name")]}] )
내가 지금 나와 함께 코드를 가지고 있지 않기 때문에 코드는 구문 오류가있을 수 있습니다.
해결법
-
==============================
1.당신은 집계 파이프 라인에서 자바 스크립트 함수를 호출 할 수 있습니다 생각하는 것,하지만 당신은이 작업을 수행 할 수 없습니다. 당신은 실제로 파이프 라인 내에서 실행을위한 함수 결과에서 변수의 "보간"무엇을 착각하고 있습니다.
당신은 집계 파이프 라인에서 자바 스크립트 함수를 호출 할 수 있습니다 생각하는 것,하지만 당신은이 작업을 수행 할 수 없습니다. 당신은 실제로 파이프 라인 내에서 실행을위한 함수 결과에서 변수의 "보간"무엇을 착각하고 있습니다.
예를 들어 내가 이렇게 할 경우 :
var getNumbers = function() { return [ 1,2,3 ] };
그런 다음이 전화 :
db.collection.aggregate([ { "$project": { "mynums": getNumbers() }} ])
그리고 실제로 자바 스크립트에서 무슨 일이 명령이 다음과 같이 서버로 전송됩니다 "전에"값이 "보간"를하고있다 쉘 :
db.collection.aggregate([ { "$project": { "mynums": [1,2,3] }} ])
더 그것을 설명하기 위해, 서버의 기능을 "만"은 저장 :
db.system.js.save({ "_id": "hello", "value": function() { return "hello" } })
그런 다음 집계 문을 실행하려고 :
db.collection.aggregate([ { "$project": { "greeting": hello() }} ])
그리고 그 예외가 발생합니다 :
어떤 실행이 "클라이언트"가 아니라 "서버"클라이언트에 존재하지 않는 기능에 무슨 일이 일어나고 있기 때문이다.
그렇게 할 수있는 조항이 없다으로 집계 프레임 워크는 자바 스크립트를 실행할 수 없습니다. 모든 작업은 어떤 자바 스크립트 엔진이 호출되고 있지으로, 네이티브 코드에서 수행된다. 따라서 대신이 연산자를 사용합니다 :
db.collection.aggregate([ { "$project": { "total": { "$add": [ 1, 2 ] }, "field_total": { "$subtract": [ "$gross", "$tax" ] } }} ])
그런 다음 결과를 acheive하기 위해 연산자를 사용할 수없는 경우 유일한 방법은 자바 스크립트 코드는 물론 컬렉션에서 데이터를 인터페이스에 자바 스크립트 엔진을 사용하는 대신 맵리 듀스를 실행하는 것입니다 실행할 수 있습니다. 당신이 필요로하는 경우 그리고 거기에서 당신은 또한 당신의 논리 내부의 서버 측 기능을 referce 수 있습니다 :
{ "key": 1, "value": 1 }, { "key": 1, "value": 2 }, { "key": 1, "value": 3 } db.system.js.save({ "_id": "square", "value": function(num) { return num * num } }) db.collection.mapReduce( function() { emit(this.key,square(this.value)) }, function(key,values) { return Array.sum(values); }, { "out": { "inline": 1 } } )
보고:
{ "_id": 1, "value": 14 }
이에 대해되지 않도록하지만 정말 통합 프레임 워크는 어떤 식 으로든에서 자바 스크립트를 지원하지 않는다는 사실에 대해 "어떻게 필드 값을 전달합니다", 그리고 당신이 일어나고 있다고 생각하는 것은 사실이 아니다입니다.
from https://stackoverflow.com/questions/31620582/custom-functions-calculated-columns-mongodb-projection by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 배열 필드의 모든 값이 다른 배열에 존재 선택 문서 (0) | 2019.12.27 |
---|---|
[MONGODB] MongoDB를 3.6.0-RC3 배열 필터가 작동하지? (0) | 2019.12.27 |
[MONGODB] 배열에서 Upsert 및 $ INC는 하위 문서 (0) | 2019.12.27 |
[MONGODB] MongoDB의 데이터베이스는 자동으로 삭제 (0) | 2019.12.27 |
[MONGODB] ID의 목록을 감안할 때, IDS 컬렉션에 존재하지 않는 쿼리하는 가장 좋은 방법은 무엇입니까? (0) | 2019.12.27 |