gpt4 book ai didi

PHP 和 MongoDB : Using multiple '$or'

转载 作者:可可西里 更新时间:2023-11-01 10:05:59 25 4
gpt4 key购买 nike

我正在尝试将此查询转换为数组,以便我可以在 PHP 中使用,但我遇到了“索引”问题...如您所见,我需要多个“$or”,因为每个“$or”验证一组字段,我不能将它们全部加入同一个“$or”。

这是查询对象:

{
'$and' : [
{ '$or' : [
{'author' : { '$exists' : false } }
, {'author' : { '$in' : [ 'john' , false ] } }
] }
, {'$or' : [
{ '$and' : [ { 'type' : 'post' } , { 'user_id' : 123456 } ] }
, { 'type' : 'comment' }
] }
, { '$or' : [
{ 'tags.name' : { '$in' : [ 'tag1' , 'tag2' ] } }
, { 'tags' : false }
, { 'tags' : { '$exists' : false } }
] }
]
}

第一组 '$or' 验证 'author' 字段,所以我正在搜索字段中包含 'john' 或 false 的任何文档,我想要没有 'author' 字段的文档.第二组验证“类型”字段,其中我需要将“评论”作为值或“发布”并且“user_id”为 123456 的文档。第三组验证 'tags' 字段,我需要在 '$in' 或 'tags' = false 或 'tags' 不存在的地方添加一些 'tags.name'...

这 3 个集合必须为真,这就是为什么它们都在“$and”运算符中...我知道“$and”仅在 2.0+ 中有效,但我使用的是 2.1(聚合框架测试...它只是摇滚!XD)

我想就是这样了...如果有另一种编写查询的方式我真的很想看到...谢谢!

最佳答案

这是您在 PHP 中的查询

$conn = new Mongo("localhost:$port");
$db = $conn->test;
$collection = $db->tb;

$or1 =
array( '$or' => array(
array( 'author' => array( '$exists' => false ) ) ,
array( 'author' => array( '$in' => array('john', false) ) )
));

$or2 =
array( '$or' => array(
array( '$and' =>
array(
array( 'type' => 'post') ,
array( 'userid' => 123456 )
)
),
array( 'type' => 'comment')
));

$or3 =
array( '$or' => array(
array( 'tags.name' => array( '$in' => array('tag1', 'tag2') ) ) ,
array( 'tags' => false ),
array( 'tags' => array( '$exists' => false ) )
));

$query = array( '$and' => array( $or1, $or2, $or3 ) );


$cursor = $collection->find($query);
foreach( $cursor as $doc ) {
// do something
}

关于PHP 和 MongoDB : Using multiple '$or' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656717/

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