mongoimport可以维护深嵌套键的指定顺序吗?

时间:2015-03-25 10:57:58

标签: mongodb nested mongoimport

我有一些我试图导入MongoDB的测试数据:

{ "name": "A3", "year": "1999", "parts": { "oil filter": { "type": 2, "partno": "123" }, "air filter":{ "type": 6, "partno": "gf6" } }}
{ "name": "A3", "year": "2000", "parts": { "oil filter": { "type": 2, "partno": "123" }, "air filter":{ "type": 6, "partno": "gf6" } }}
{ "name": "A3", "year": "2001", "parts": { "oil filter": { "type": 2, "partno": "123" }, "air filter":{ "type": 6, "partno": "gf6" } }}
{ "name": "A3", "year": "2002", "parts": { "oil filter": { "type": 2, "partno": "123" }, "air filter":{ "type": 6, "partno": "gf6" } }}
{ "name": "A3", "year": "2003", "parts": { "oil filter": { "type": 2, "partno": "557" }, "air filter":{ "type": 6, "partno": "gf4" } }}
{ "name": "A3", "year": "2004", "parts": { "oil filter": { "type": 2, "partno": "557" }, "air filter":{ "type": 6, "partno": "gf4" } }}

如果我使用db.cars.insert()插入行,则所有嵌套字段都会按照显示的顺序显示。但是,如果我使用 mongoimport 导入这些行,则订单会搞乱:

{ "name" : "A3", "year" : "1999", "parts" : { "oil filter" : { "type" : 2, "partno" : "123" }, "air filter" : { "type" : 6, "partno" : "gf6" } } }
{ "name" : "A3", "year" : "2000", "parts" : { "air filter" : { "type" : 6, "partno" : "gf6" }, "oil filter" : { "type" : 2, "partno" : "123" } } }
{ "name" : "A3", "year" : "2001", "parts" : { "air filter" : { "type" : 6, "partno" : "gf6" }, "oil filter" : { "type" : 2, "partno" : "123" } } }
{ "name" : "A3", "year" : "2002", "parts" : { "oil filter" : { "type" : 2, "partno" : "123" }, "air filter" : { "type" : 6, "partno" : "gf6" } } }
{ "name" : "A3", "year" : "2003", "parts" : { "oil filter" : { "type" : 2, "partno" : "557" }, "air filter" : { "type" : 6, "partno" : "gf4" } } }
{ "name" : "A3", "year" : "2004", "parts" : { "oil filter" : { "type" : 2, "partno" : "557" }, "air filter" : { "type" : 6, "partno" : "gf4" } } }

这意味着如果我想检查哪些文档具有相同的嵌套“部分”,我无法正确比较它们。

> db.cars.aggregate([
... { $group: {
... _id: { name: "$name", parts: "$parts" },
... models_in_group: { $push: { year:"$year" } },
... } },
... ])
{ "_id" : { "name" : "A3", "parts" : { "air filter" : { "type" : 6, "partno" : "gf6" }, "oil filter" : { "type" : 2, "partno" : "123" } } },  "models_in_group" : [ { "year" : "2000" }, { "year" : "2001" } ] }
{ "_id" : { "name" : "A3", "parts" : { "oil filter" : { "type" : 2, "partno" : "557" }, "air filter" : { "type" : 6, "partno" : "gf4" } } },  "models_in_group" : [ { "year" : "2003" }, { "year" : "2004" } ] }
{ "_id" : { "name" : "A3", "parts" : { "oil filter" : { "type" : 2, "partno" : "123" }, "air filter" : { "type" : 6, "partno" : "gf6" } } },  "models_in_group" : [ { "year" : "1999" }, { "year" : "2002" } ] }

应该只有两组。那么,mongoimport可以维持深层嵌套键的指定顺序吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,由于您要导入JSON对象而不是JSON对象数组,因此无法给出特定的顺序。

我认为唯一能做到这一点的方法就是编写一个为你做这件事的例程。