我正在浏览他们网站上的try.mongodb.org教程(网页上的嵌入式终端模拟器)。我在项目t4和t5(你在教程中为项目键入tx)。
在t4中我们填充数据库。
> t4. Saving and Querying > Try adding some documents to the scores collection: > for(i=0; i<10; i++) { db.scores.save({a: i, exam: 5}) }; > > Try that, then enter > db.scores.find(); > to see if the save succeeded. Since the shell only displays 10 results at time, > you'll need to enter the 'it' command to iterate over the rest. > > (enter 'next' when you're ready)
我考试5 +我只是为了好玩:
for(i=0; i<10; i++) { db.scores.save({a: i, exam: 5+i}) };
那么数据库中有什么?我输入db.scores.find();并得到以下,这是我所期望的,虽然顺序似乎是随机的。细
>
[
{ "exam" : 14, "a" : 9, "_id" : { "$oid" : "52b1d16bcc937439340649c4" } },
{ "exam" : 5, "a" : 0, "_id" : { "$oid" : "52b1d191cc937439340649c5" } },
{ "exam" : 6, "a" : 1, "_id" : { "$oid" : "52b1d191cc937439340649c6" } },
{ "exam" : 7, "a" : 2, "_id" : { "$oid" : "52b1d191cc937439340649c7" } },
{ "exam" : 8, "a" : 3, "_id" : { "$oid" : "52b1d191cc937439340649c8" } },
{ "exam" : 10, "a" : 5, "_id" : { "$oid" : "52b1d191cc937439340649c9" } },
{ "exam" : 9, "a" : 4, "_id" : { "$oid" : "52b1d191cc937439340649ca" } },
{ "exam" : 11, "a" : 6, "_id" : { "$oid" : "52b1d191cc937439340649cb" } },
{ "exam" : 12, "a" : 7, "_id" : { "$oid" : "52b1d191cc937439340649cc" } },
{ "exam" : 13, "a" : 8, "_id" : { "$oid" : "52b1d191cc937439340649cd" } }
]
在t5中,我们搜索该数据库中的项目:
> 5. Basic Queries You've already tried a few queries, but let's make them more specific. How about finding all documents where a == 2:
db.scores.find({a:2});
Or what about documents where a > 15? db.scores.find({a: {'$gt': 15}});
a == 2搜索有效,但&gt; 15一个没有。首先,根据项目t4,不应有超过15的条目
所以我尝试超过6:db.scores.find({a: {'$gt': 6}});
我得到以下输出,这对我来说真的很令人惊讶,因为对于== 7,a == 8和a == 9,应该只有3个条目。
>
[
{ "exam" : 14, "a" : 9, "_id" : { "$oid" : "52b1d16bcc937439340649c4" } },
{ "exam" : 12, "a" : 7, "_id" : { "$oid" : "52b1d191cc937439340649cc" } },
{ "exam" : 13, "a" : 8, "_id" : { "$oid" : "52b1d191cc937439340649cd" } },
{ "exam" : 14, "a" : 9, "_id" : { "$oid" : "52b1d191cc937439340649ce" } },
{ "exam" : 12, "a" : 7, "_id" : { "$oid" : "52b1d1a8cc937439340649d6" } },
{ "exam" : 13, "a" : 8, "_id" : { "$oid" : "52b1d1a8cc937439340649d7" } },
{ "exam" : 14, "a" : 9, "_id" : { "$oid" : "52b1d1a8cc937439340649d8" } },
{ "exam" : 5, "a" : 7, "_id" : { "$oid" : "52b1d49fcc937439340649f1" } },
{ "exam" : 5, "a" : 9, "_id" : { "$oid" : "52b1d49fcc937439340649f3" } },
{ "exam" : 5, "a" : 8, "_id" : { "$oid" : "52b1d49fcc937439340649f4" } }
]
如果你看一下右边最初输出的db.scores.find()id,最后一个字符随每个条目上升 - 4,5,6,7,8,9,a,b,c, d。但是在重复的条目中,看看a == 9的条目。我们在4中有一个结尾,一个以e结尾,一个以3结尾。似乎在操作的大脑中数据库有30个条目,而不是10。
{“考试”:14,“a”:9,“_ id”:{“$ oid”:“52b1d16bcc937439340649c4”}}, {“考试”:14,“a”:9,“_ id”:{“$ oid”:“52b1d191cc937439340649ce”}}, {“考试”:5,“a”:9,“_ id”:{“$ oid”:“52b1d49fcc937439340649f3”}},
我注意到如果我尝试使用t4中的循环重新填充数据库,它似乎不会重写值。即如果我使用for(i=0; i<10; i++) { db.scores.save({a: i, exam: 5}) };
作为示例建议而不是我只是为了好玩for(i=0; i<10; i++) { db.scores.save({a: i, exam: 5+i}) };
。不确定这是否有助于诊断问题,但这是另一种观察。
答案 0 :(得分:1)
您确定没有多次运行这些命令吗?如果你运行db.scores.find()。count(),你会看到什么,它将告诉你表中有多少项。
答案 1 :(得分:1)
你遗漏了一些非常特别的东西,
我注意到,如果我尝试使用循环重新填充数据库 在t4中它似乎没有重写值。即如果我使用(i = 0; I&LT; 10; i ++){db.scores.save({a:i,exam:5})};作为例子 建议而不是我的乐趣(i = 0; i&lt; 10; i ++){ db.scores.save({a:i,exam:5 + i})};。不确定这是否有帮助 诊断问题,但这是另一个观察。
重新填充运行查询的数据库不止一次将每次创建10行。 db.scores.save不知道要更新的文档,因为您没有引用_id字段,在这种情况下,它将始终创建10条记录。要更新现有记录,您应该提供先前插入的_id字段。我确定你不止一次运行它,你希望总有10条记录,你每次都要插入10条记录。
尝试删除集合,运行循环一次并执行查找,它将起作用。