mongodb - 如何查询集合和文档

时间:2014-03-17 21:43:03

标签: mongodb

所以说我有一系列文件。每个文档都包含主要和次要地址,例如......

{
  primaryAddress: "94-111",
  secondaryAddress: "94-111"
}

我想要做的是,查询主要地址为" 94-111"但排除primaryAddress等于secondaryAddress的所有结果。

我尝试了以下但没有运气。

db.address.find({primaryAddress:"94-111", secondaryAddress: {$ne this.primaryAddress}})

3 个答案:

答案 0 :(得分:1)

要比较文档中的两个字段,请使用聚合框架:

db.addresses.aggregate({
  $project: {
      primaryAddress: '$primaryAddress',
      secondaryAddress: '$secondaryAddress',
      eq: {$eq: ['$primaryAddress', '$secondaryAddress']}
  }
}, {
    $match: {eq: false}
})

管道的$project阶段将主要和次要地址带入下一阶段,并添加一个字段eq,如果字段相等则为true且{ {1}}否则。

false阶段获取第一阶段处理的文档,并过滤掉$matcheq的文档。

此聚合管道将比true子句快得多,后者在服务器上为每个文档执行Javascript。

答案 1 :(得分:0)

尝试这样的事情

db.address.find( 
  { $where: "this.primaryAddress == '94-111' &&
             this.primaryAddress != this.secondaryAddress" } );

应该等同于

db.address.find( 
  { $where: "this.primaryAddress == '94-111' &&
             this.secondaryAddress != '94-111'" } );

如果您愿意,可以删除where运算符,请参阅here

答案 2 :(得分:0)

如果你想要的文件,其中primaryAddress =" 94-111" AND secondaryAddress<> " 94-111",试试这个:

db.address.find({primaryAddress:"94-111", secondaryAddress: {$ne: "94-111"}})

如果您需要primaryAddress<>的文档secondaryAddress,请参阅@ Jesse的解决方案