MongoDB $or 查询在 mongorestore 之后对我不起作用

发布于 2024-12-01 02:22:20 字数 672 浏览 1 评论 0原文

我运行了 mongodump,然后运行 ​​mongorestore 将 MongoDB 数据库从一台计算机移动到另一台计算机。数据在那里,我可以查询它们(第一个查询)并获取结果,但在查询中使用 $or 不会产生任何结果(第二个查询)。

db.employees.find( { 'name.first' : 'Joe' })
-- vs --
db.employees.find( { $or : [ { 'name.first' : 'Joe' }]})

据我所知,索引是从 system.indexes.bson 重新创建的,有什么想法是错误的吗?

索引:

> db.employees.getIndexes()
[
    {
        "name" : "_id_",
        "ns" : "data.demployees",
        "key" : {
            "_id" : 1
        }
    }
]
  • 原始服务器:MongoDB 1.6.5 64b
  • 新服务器:MongoDB 1.4.4 32b

我是通过控制台运行查询,而不是pymongo。

I ran a mongodump and then mongorestore to move a MongoDB database from one computer to another. The data are there, I can query them (first query) and get results but using $or in a query produces no results (second query).

db.employees.find( { 'name.first' : 'Joe' })
-- vs --
db.employees.find( { $or : [ { 'name.first' : 'Joe' }]})

As far as I can tell, indexes have been recreated from system.indexes.bson, any ideas what is wrong?

indexes:

> db.employees.getIndexes()
[
    {
        "name" : "_id_",
        "ns" : "data.demployees",
        "key" : {
            "_id" : 1
        }
    }
]
  • original server: MongoDB 1.6.5 64b
  • new server: MongoDB 1.4.4 32b

I was running the query through the console, not pymongo.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌面超妹 2024-12-08 02:22:20

为了真正提供帮助,我们需要一些信息:

  • 版本号(MongoDB 和 pymongo、服务器和新计算机)
  • db.employees.getIndexes() 输出的
  • 您可以对较小的数据运行测试吗放? (见下文)
  • 您可以仔细检查数据类型吗?

较小的数据集

尝试将一小部分员工复制到新集合中并运行相同的查询:

db.employees.find().limit(100).forEach( function(x) { db.employees_test.insert(x); } )

基本上,让我们尝试排除数据损坏的情况。然后,让我们尝试隔离该版本,看看这是否是一个已知的错误。

仔细检查数据类型

确保数据类型正确。

这是一个错误吗?

这可能是一个错误,但如果是,那么该错误应该很容易重现。一旦您仔细检查系统是否行为不正确,就可以重现此问题,以便至少可以提交错误。

To really help here, we need a few pieces of information:

  • version numbers (MongoDB and pymongo, server and new computer)
  • output from db.employees.getIndexes()
  • can you run a test on a smaller data set? (see below)
  • can you double-check data types?

Smaller Data Set

Try copying out a small set of the employees to a new collection and run the same queries:

db.employees.find().limit(100).forEach( function(x) { db.employees_test.insert(x); } )

Basically, let's try to rule out corruption of data. Then let's try to isolate the version and see if this is a known bug.

Double-check Data Types

Ensure that the data types are correct.

Is this a bug?

This could be a bug, but if it is, the bug should be trivial to reproduce. Once you've double-checked that the system is behaving incorrectly, it's time to repro this so that you can at least file a bug.

2024-12-08 02:22:20

pymongo 需要在特殊运算符周围加上引号——你尝试过吗?

db.employees.find( { '$or' : [ { 'name.first' : 'Joe' }]})

pymongo requires quotes around the special operators-- have you tried this?

db.employees.find( { '$or' : [ { 'name.first' : 'Joe' }]})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文