【问题标题】:Find documents with a certain field value only when another field value is a given string仅当另一个字段值为给定字符串时才查找具有某个字段值的文档
【发布时间】:2019-04-22 14:40:24
【问题描述】:

我正在使用这个 php 包进行查询 - https://github.com/jenssegers/laravel-mongodb

情况是,有两个字段,user_idpost_status 等等。我想检索该集合中的所有文档,但是当post_status 字段值为draft 时,只有当user_id 是给定字符串时才应该检索它。这个想法是,只有登录的用户才能在其他帖子中找到他们起草的帖子。

我很难为这个问题找到任何解决方案。该应用程序仍未投入生产。如果我应该以某种不同的方式存储数据,那也是一种选择。

【问题讨论】:

  • 什么是架构,您可以在这里发布记录以便更好地理解以及您尝试过什么查询吗?
  • { "_id" : ObjectId("5cbb6405c393850b88002f63"), "title" : "some title", "status" : "draft", "summary" : null, "post_category" : [ "5c377074c393852988004bad", "5c377090c393852988004bb0" ], "likes_count" : 1, "liked_by" : [ "5c8e3817c3938504b8005f86" ], "views_count" : 0, "comments_count" : 0, "user_id" : "5c618615903aaa496d129d90", "rating" : null, "enabled" : "enabled", "updated_at" : ISODate("2019-04-20T23:23:30.000Z"), "created_at" : ISODate("2019-04-20T18:25:09.000Z") }
  • 我希望用户在其他帖子中找到带有"status": "draft" 的帖子,如果user_id 是他们的用户ID。在这种情况下,我不知道该尝试什么,因为它需要我在查询中运行 IF 语句。
  • 你这句话不清楚,among the other posts IF user_id is their user id是什么意思,不就是user_id = <id>status = draft所在的用户的所有帖子吗?

标签: mongodb eloquent mongodb-query jenssegers-mongodb


【解决方案1】:

仅当另一个字段值为给定字符串时才查找具有某个字段值的文档

您提出的问题只是简单地转换为一个和查询,让我们看看它

当另一个字段值是给定的字符串时

这意味着您有一些结果集,当user_id 与某个字符串匹配时,您需要过滤掉。即some result sets and user_id = <id>

现在考虑句子的第一部分Find documents with a certain field value

这意味着您正在过滤带有一些值的记录,即"status" = "draft",无论结果如何,都希望再次根据user_id = <id>进行过滤

所以最后你会得到以下查询:

db.collectionName.find({"status":"draft", "user_id": "5c618615903aaa496d129d90"})

希望这个解释对您有所帮助,或者您可以改写您的问题,我将尝试通过 ans 进行修改。

【讨论】:

  • 对不起,如果我的措辞不是很清楚。我不太确定如何表达这个任务。我发现这个问题与我的问题相同,并设法在那里找到解决方案。 stackoverflow.com/questions/25713546/…
  • var usr = "5c618615903aaa496d129d90" db.getCollection('posts').find({ $or:[ {status: {$ne: "draft"}}, {user_id: usr} ]})
  • 使用 jenssegers 包:$query = DB::collection('posts')->where(function($qry) use ($user){ $qry->where('user_id', $user) ->orWhere('status', '<>', 'draft'); })->get();
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2018-07-03
相关资源
最近更新 更多