【问题标题】:Mongoose: How to combine .where with $elemMatch?Mongoose:如何将 .where 与 $elemMatch 结合使用?
【发布时间】:2013-02-17 07:07:13
【问题描述】:

代码如下:

start = 0; end = 24
var updateQuery = schema.find({ account: accountID });
updateQuery.where( 'hour' ).gt( start ).lt( end );
updateQuery.exec( ...

如果hour 是一个数字,这很好用。实际上,它是一个数组,其中包含一个值和一个 updatedBy 键的对象: [{ value: 23, updatedBy: 'o45h43o8' }, ...]

现在,我想将 where-query 与 $elemMatch 结合起来,以确定 hour[0].value 是否介于 startend 之间。这可行吗?

更新:澄清了我的问题。

【问题讨论】:

  • 你能澄清你的问题吗,你提到hour是一个数字,也是一个带有value元素字段的数组,然后又是v元素字段?
  • 我试图澄清我的问题。 'hour' 是一个数组,v 是值。现在好吗?对不起..
  • 您是专门检查hour[0] 元素还是所有元素?
  • 是的。它应该是第一个元素。不是全部。
  • 好的,我为此更新了答案。

标签: node.js mongodb mongoose


【解决方案1】:

您不需要为此使用$elemMatch,您可以像这样使用点表示法:

updateQuery.where( 'hour.0.value' ).gt( start ).lt( end );

【讨论】:

  • 感谢您的建议。我想看看第一个元素是否在开始和结束之间。我尝试了你的建议,但它似乎不起作用。我想,如果小时包含一个对象但它包含一个包含对象的数组,那么点符号就可以工作。
  • @Benjamin 我确实尝试过这个,它在 MongoDB 2.2.3 上对我有用。我认为它至少需要 2.2。
猜你喜欢
  • 2013-12-21
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多