Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb-如何查询集合和文档_Mongodb - Fatal编程技术网

mongodb-如何查询集合和文档

mongodb-如何查询集合和文档,mongodb,Mongodb,比如说我有一套文件。每个文档都包含一个主地址和辅助地址,例如 { primaryAddress: "94-111", secondaryAddress: "94-111" } 我要做的是,查询主地址为“94-111”的主地址,但排除primaryAddress等于secondaryAddress的所有结果 我尝试了以下方法,但没有成功 db.address.find({primaryAddress:"94-111", secondaryAddress: {$ne this.primar

比如说我有一套文件。每个文档都包含一个主地址和辅助地址,例如

{
  primaryAddress: "94-111",
  secondaryAddress: "94-111"
}
我要做的是,查询主地址为“94-111”的主地址,但排除primaryAddress等于secondaryAddress的所有结果

我尝试了以下方法,但没有成功

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

试试这样的

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运算符,请参阅。

如果您想要在primaryAddress=“94-111”和secondaryAddress“94-111”之间放置文档,请尝试以下操作:

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

如果您希望文档包含primaryAddress secondaryAddress,请参阅@Jesse的解决方案要比较文档中的两个字段,请使用聚合框架:

db.addresses.aggregate({
  $project: {
      primaryAddress: '$primaryAddress',
      secondaryAddress: '$secondaryAddress',
      eq: {$eq: ['$primaryAddress', '$secondaryAddress']}
  }
}, {
    $match: {eq: false}
})
管道的
$project
阶段将主地址和次地址带入下一阶段,并添加一个字段
eq
,如果字段相等,则为
true
,否则为
false

$match
阶段获取第一阶段处理的文档,并过滤掉
eq
true
的文档

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