【问题标题】:Querying a collection with an array of mongoID使用 mongoID 数组查询集合
【发布时间】:2017-03-03 03:36:16
【问题描述】:

我有以下代码:

// company_ids is an array of mongo IDs
// company_id is an array (with only 1 element) of mongo ID
foreach($company_ids as $company_id){
    $results = Archive::where("billing.company._id", 'all', array($company_id))->get();
    ...

这是Log::info(print_r($company_ids, true))的输出

[2016-10-22 02:41:27] production.INFO: Array
(
    [0] => 57515764b91a8c4d008b45d1
    [1] => 57515764b91a8c4d008b45d6
    [2] => 57515764b91a8c4d008b45db
    [3] => 57515764b91a8c4d008b45e0
    ...
)

如何使用company_ids 直接查询Archive 集合并消除对foreach 循环的需要?

【问题讨论】:

  • 你试过 $results = Archive::where("billing.company._id", 'all', $company_ids)->get();
  • 是的,我试过了,但结果是空的。
  • 试试 $results = Archive::where("billing.company._id", 'all', json_decode('{"$in":'+json_decode($company_ids)+'}' )->get();
  • 那也不行; phpStorm 抱怨连接运算符错误,第二个 json_decode 错误输出期望字符串,stackoverflow.com/questions/7436925/… 解决了。这就是我最终得到的结果: Archive::where("billing.company._id", 'all', json_decode('{"$in":' . json_encode($company_ids) . '}')->get( ));但它仍然会出错“调用数组上的成员函数 get()”

标签: php mongodb mongodb-query jenssegers-mongodb


【解决方案1】:

@Robbie 回答中的一个小更新。无需使用MongoIds 的数组,只需使用字符串数组即可。我只使用 laravel-jenessengers

$company_ids = [
    '57515764b91a8c4d008b45d1',
    '57515764b91a8c4d008b45d6',
    '57515764b91a8c4d008b45db',
    '57515764b91a8c4d008b45e0'
]

$results = Archive::whereIn('billing.company._id', $company_ids)->get();

【讨论】:

    【解决方案2】:

    根据库的readme

    $results = Archive::whereIn('billing.company._id', $company_ids)->get();
    

    (我不清楚 $company_ids 数组是什么,但我认为它必须是 MongoID 数组:但这也取决于您使用的底层库,MongoMongoDB,因为两者库支持)

    $company_ids = [
        new mongoID('57515764b91a8c4d008b45d1'),
        new mongoID('57515764b91a8c4d008b45d6'),
        new mongoID('57515764b91a8c4d008b45db'),
        new mongoID('57515764b91a8c4d008b45e0'),
    ]
    

    【讨论】:

    • 试过了但是不行,$results 是空的。但是,不比较子文档的类似查询将起作用。
    • 其实只是重新阅读你的结构,billing.company._id 看起来不是 MongoID 而是你自己的个人 ID?如果是这样,只需将 ID 作为字符串传入数组。如果您要查找 MongoID (_id) 列,请仅使用新的 MongoID()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多