1

假设我有一个具有两个属性的 Collection:amount 和amountreceived,它们是小数。

我想编写一个查询,该查询将从集合中返回满足金额大于收到金额标准的项目。

目前我有一个看起来像这样的javascript函数:

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

我还有一个看起来像这样的集合:

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

如果我运行db.MyCollection.find(f)返回的唯一结果是 item1。

关于为什么该查询不会返回两个结果的任何想法?

4

2 回答 2

2

我假设您使用的是 C# 驱动程序?因为 BSON 没有十进制数据类型,所以 C# 驱动程序必须以某种方式表示 .NET 十进制值。默认表示为字符串,这对不丢失任何精度有利,但对查询不利。

您还可以要求 C# 驱动程序将 .NET 十进制值存储为 BSON 双精度值,这会导致一些精度损失并可能溢出,但对查询很有用。

于 2011-03-14T17:18:11.440 回答
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 }
于 2011-03-14T17:13:16.500 回答