【问题标题】:How to see removed records from mongo?如何查看从 mongo 中删除的记录?
【发布时间】:2015-09-29 23:43:43
【问题描述】:

我有一个包含一些 IDs 的数组,我想从 mongo 中删除没有我数组中的 id 的记录。

我使用了这个代码

编辑

`> db.people.remove({ "_id" : { $nin: ["1","2","3"] }});`

结束编辑

我从这里得到灵感How do I do a "NOT IN" query in Mongo?

我需要查看删除了哪些记录。有没有一种方法可以直接从查询中获取数据?

我宁愿避免使用从 mongo 搜索当前数据的方法,然后查看我的数组与 mongo 的数组之间的差异。

我将这个应用到 Symfony2,所以如果有人有一些建议,那就太棒了

【问题讨论】:

  • 真正的问题是“为什么它对你很重要?”。在什么情况下,知道哪些提供的值导致匹配并随后被删除,哪些根本没有找到,对您有什么好处?真的不应该有任何情况。如果您尝试“同步”,则从一个源中删除所有内容,如果您实际上不匹配任何内容以从另一个源中删除,则无关紧要。如果您必须对此如此迂腐,那么循环值数组并在返回原始文档时发出.findAndModify()null 表示未找到。但从不散装。
  • 这很重要,因为我想跟踪被删除的那些,但我不想进行两个不同的查询。

标签: php mongodb symfony


【解决方案1】:

db.people.remove 不会返回被删除的文档,但它会返回被删除的文档的数量,以便您检查它们是否都被成功删除。

这是一种您可以做您想做的事情的方法,但它可能适合您的应用程序,也可能不适合您的应用程序:

  1. 查找要删除的文档集
  2. 将它们保存在内存中(即将它们存储为分配给变量的列表)
  3. 执行删除操作
  4. 检查删除文档的数量以确保成功
  5. 如果成功,则显示来自变量的文档

您也可以使用 findAndModify 命令http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/。这将返回已删除的文档,但一次只执行一个,因此您需要执行某种循环。

【讨论】:

  • 对不起,我知道我提出的问题只搜索了记录,并没有删除它们。我试图展示我(几乎)所做的一个例子,以便人们理解我想要做什么(我的错是在帖子中“找到”而不是“删除”)。我设法删除了不在我的 ID 数组中的记录。您建议“查找要删除的文档集”。除了我说过要避免的方法之外,您知道我还可以应用什么其他方法吗?
  • 我不认为我建议的方法正是您想要避免的方法......不过没关系。这可能会有所帮助:stackoverflow.com/questions/11607487/…。我也编辑了我的答案
  • 该链接不能解决我的问题:“findAndModify”对我不起作用。我不知道我需要删除哪些值,所以我无法搜索和删除它们。这就是我需要找到的:从我的问题运行查询后删除了哪些值。但感谢您的关注和帮助。
  • 你可以在 findAndModify 中使用 $nin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2021-07-12
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多