Mongodb 如何最好地跨字段在文档中进行查询

Mongodb 如何最好地跨字段在文档中进行查询,mongodb,Mongodb,我有一大堆文件,比如 { _id : "abc", createdOn : ISODate( '2013-04-27T00:00:00.000Z' ), updatedOn : ISODate( '2013-04-27T00:00:00.000Z' ) }, { _id : "def", createdOn : ISODate( '2013-04-27T00:00:00.000Z' ), updatedOn : ISODate( '2013-04-

我有一大堆文件,比如

{
    _id : "abc",
    createdOn : ISODate( '2013-04-27T00:00:00.000Z' ),
    updatedOn : ISODate( '2013-04-27T00:00:00.000Z' )
},
{
    _id : "def",
    createdOn : ISODate( '2013-04-27T00:00:00.000Z' ),
    updatedOn : ISODate( '2013-04-27T00:11:11.111Z' )
}
将文档插入列表时,createdOn和updatedOn值相等。当文档存在时,仅更新UpdateOn字段

我正在尝试编写查询,查找特定日期范围内更新的所有文档,但只需要创建的文档!=更新了。到目前为止,我得到的查询是有效的,但我讨厌它。我正在努力弄清楚如何在不使用直接JavaScript的情况下跨字段查询。以下是我得到的:

startTime = ISODate( '2013-04-27T00:00:00.000Z' );
endTime = ISODate( '2013-04-27T01:00:00.000Z' );
db.profiles.find(
  { "updatedOn" : { $gte : startTime, $lt : endTime },
    $where : "obj.createdOn == null || obj.createdOn.getTime() != obj.updatedOn.getTime()"
  },
  {_id: 1, createdOn: 1, updatedOn: 1}
);

有更好的办法吗?类似于避免使用$where javascript,让我直接比较文档的createdOn和updatedOn字段。

如果没有javascript或聚合框架,就无法做到这一点。一种解决方法是向模式中添加另一个字段,该字段在更新“updated”字段时开始,比如false,并设置为true。它将以原子方式发生,然后您可以查询该字段加上更新范围。如果不清楚,我可以写一个例子作为答案。所以这是Mongo能做的最好的了。谢谢你证实我的怀疑。我想我会在这里编写一些非规范化的代码。我想,无模式是要付出代价的。我认为这比灵活模式的代价更大:)或者更大的好处。您可以完全按照需要设计和发展模式。。。