2011-03-14 5 views
1

두 개의 속성을 가진 Collection이 있다고 가정 해 봅시다. amount와 amount는 소수입니다.MongoDB 고급 쿼리

받은 금액보다 큰 금액의 기준을 충족하는 항목을 컬렉션에서 반환하는 쿼리를 작성하고 싶습니다. 내가 db.MyCollection.find(f)을 실행하면

item1 : amount = 50, amountreceived = 0; 
item2 : amount = 50, amountreceived = 25; 

반환 유일한 결과는 항목 1이다 : 나는이처럼 보이는 컬렉션 세트가

f = function() { return this.amount > this.amountreceived;} 

:

현재 I는 다음과 같습니다 자바 스크립트 기능이 .

왜 그 쿼리가 두 결과를 모두 반환하지 않을지에 대한 아이디어가 있습니까?

+0

누군가가 드라이버가 소수를 저장하는 방법과 관련이 있다고 생각합니까? – strickland

답변

2
난 당신이 C#을 드라이버를 사용하고 있으리라 믿고있어

? BSON에는 10 진수 데이터 형식이 없으므로 C# 드라이버는 .NET 10 진수 값을 어떤 식 으로든 나타내야합니다. 기본 표현은 문자열로, 어떤 정밀도는 잃지 않지만 쿼리 수행에는 좋지 않습니다.

C# 드라이버에 .NET 소수 값을 BSON double로 저장하도록 요청할 수도 있습니다. BSN double 값은 정밀도를 잃고 오버플로가 발생할 수 있지만 쿼리에는 유용합니다.

+0

응답을 주셔서 감사합니다.이 로직을 표시하기 위해 부울을 저장합니다. – strickland

1

이 작업을 올바르게 수행하고 있습니까? 아래 예를위한 반대 사례가 있습니까?

다음은 내 샘플 테스트 스크립트입니다. (db.foo이 비어)

MongoDB shell version: 1.6.5 
connecting to: test 
> db.foo.insert({_id : 1, amount : 50, amtreceived : 100 }) 
> db.foo.insert({_id : 2, amount : 50, amtreceived : 25 }) 
> db.foo.insert({_id : 3, amount : 50, amtreceived : 0 }) 
> db.foo.find() 
{ "_id" : 1, "amount" : 50, "amtreceived" : 100 } 
{ "_id" : 2, "amount" : 50, "amtreceived" : 25 } 
{ "_id" : 3, "amount" : 50, "amtreceived" : 0 } 
> f = function() { return this.amount > this.amtreceived; } 
function() { 
    return this.amount > this.amtreceived; 
} 
> db.foo.find(f) // expect 2 & 3 
{ "_id" : 2, "amount" : 50, "amtreceived" : 25 } 
{ "_id" : 3, "amount" : 50, "amtreceived" : 0 } 
+0

나는 보내기 전에 똑같은 테스트를했는데 효과가 있었다. 나는 지금 그것이 드라이버가 십진수를 저장하는 방법과 관련이 있다고 생각하고 있습니다. – strickland

+0

여기 드라이버를 사용하고 있습니다 : https://github.com/mongodb/mongo-csharp-driver – strickland