gpt4 book ai didi

php - 如何通过查询同一文档中的多个字段来在 Mongodb 中进行搜索

转载 作者:行者123 更新时间:2023-12-03 02:04:14 26 4
gpt4 key购买 nike

我正在检查我接手的一个项目,该项目在 doctrine/mongoDB 中崩溃了。查询:

/**
* Deactivate all Device documents via set 'activate = false' and unsetting
* passenger field for all devices that has passenger = $oPassenger
* and Device._id != oDevice
* @param Document\Device $oDevice
* @param Document\Passenger $oPassenger
*/
public function deactivateDuplicateDevices(Document\Device $oDevice,
Document\Passenger $oPassenger)
{
$passengerId = new \MongoId($oPassenger->getId());
$deviceId = new \MongoId($oDevice->getId());

return $this->createQueryBuilder('Device')
->update()
->multiple(true)
->field('activated')->set(false)
->field('passenger')->unsetField()->equals($passengerId)
->field('_id')->notEqual($deviceId)
->getQuery()
->execute();
}

在我看来,作者正在同一个文档上运行多个查询,即查找所有文档所在位置

  • 乘客==乘客ID并且

  • 设备!=设备Id

我正在尝试逐段重新创建此查询(在 JSON 中并在 mongo 控制台上运行它)以查看问题出在哪里。这是我得到的最终输入(对于发起的 mongo,这可能看起来很荒谬......但请耐心等待):

db.Device.update(
{
passenger:{
$ne: "538c6eac3c0ab224080041aa"
}
},
{
_id:{
$ne: "538eb8d205dafff40a0041ad"
}
}
{
$unset:{
passenger:""
}
},
{
$set:
{
activated:false
}
}
)

我想测试第一部分,即多个查询(显然单独搜索乘客和单独搜索 _id 工作..但是当我将它们组合起来时):

db.Device.find({
_id:{
$ne:ObjectId("538eb8d205dafff40a0041ad")
}
},
{
passenger:{
$ne:"538c6eac3c0ab224080041aa"
}
}
)

我收到此错误:

error: {
"$err" : "Can't canonicalize query: BadValue Unsupported projection option: passenger: { $ne: \"538c6eac3c0ab224080041aa\" }",
"code" : 17287
}

知道我在这里做错了什么吗?

最佳答案

您应该使用$and ( http://docs.mongodb.org/manual/reference/operator/query/and/ )

db.Device.find({ $and: [ {
_id:{
$ne:ObjectId("538eb8d205dafff40a0041ad")
}
},
{
passenger:{
$ne:"538c6eac3c0ab224080041aa"
}
} ] }
)

关于php - 如何通过查询同一文档中的多个字段来在 Mongodb 中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24032571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com