猫鼬查询

时间:2015-10-21 14:16:46

标签: node.js mongodb mongoose

我正在处理一个处理嵌套数据的mongoose查询。

数据示例:

{
  name : 'blah',
  en : {
    state : 'published',
    pubDate : '2015-10-19-22T13:44:16.387Z'
  },
  es : {
    ...
  },
  ...
}

我想查询发布日期(pubDate)早于今天或空白的所有对象的日期。我的架构有pubDate嵌套语言(enes等。)

我的应用程序有一个locals对象,用于存储一些有用的值:为此我有locals.today映射到今天的日期以及映射到locals.lang的{​​{1}}用户'目前选择的语言。



使用mongoose我可以使用where:

查询单个参数
.where(locals.lang + '.pubDate').lt(locals.today)

我似乎无法完成的是使用或查询运算符,因为它无法识别其中的locals对象。

.or([
  { locals.lang + '.pubDate' : { '$lt' : locals.today } },
  { locals.lang + '.pubDate' : '' }
])

如果我对语言部分('en.pubDate'而不是locals.lang + '.pubDate'进行硬编码),我可以确认此语法有效,但这不是我的应用程序中可行的解决方案。此外,我尝试设置一个新变量(var publicationdate = locals.lang + '.pubDate'),但这也不起作用。似乎语法不喜欢为属性名称设置变量。



有谁知道如何在mongoose中使用or查询语法中的变量? 感谢

1 个答案:

答案 0 :(得分:2)

使用 bracket notation 动态创建对象属性,您可以按如下方式设置查询对象:

var firstObj = {},
    secondObj = {};

firstObj[locals.lang + '.pubDate'] = { '$lt' : locals.today };
secondObj[locals.lang + '.pubDate'] = '';

然后您可以将其用作:

.or([ firstObj, secondObj ])