gpt4 book ai didi

mongodb - 为什么 MongoDb 在更新后按字母顺序对齐集合键

转载 作者:可可西里 更新时间:2023-11-01 10:33:28 26 4
gpt4 key购买 nike

我已经看到,每当我们将任何值更新到 mongo 集合中时。更新后,它会按字母顺序重新排列键。假设如果当前模式是

  _id:"Objectid(blah blah)"
id: "1",
fullname: "user",
username: "username",
password: "password",

更新后变成

 _id:"Objectid(blah blah)"
fullname:"user"
id:"1"
password:"password"
username:"user"

我知道这没有问题。这不会影响任何东西,因为数组数据仍然与值相对应。但我只是想知道为什么会这样。

编辑:

这是mongoshell中更新函数的代码。但这对我没有帮助

function (query, obj, upsert, multi) {
assert(query, "need a query");
assert(obj, "need an object");
var firstKey = null;
for (var k in obj) {
firstKey = k;
break;
}
if (firstKey != null && firstKey[0] == "$") {
this._validateObject(obj);
} else {
this._validateForStorage(obj);
}
if (typeof upsert === "object") {
assert(multi === undefined, "Fourth argument must be empty when specifying upsert and multi with an object.");
opts = upsert;
multi = opts.multi;
upsert = opts.upsert;
}
this._db._initExtraInfo();
this._mongo.update(this._fullName, query, obj, upsert ? true : false, multi ? true : false);
this._db._getExtraInfo("Updated");
}

最佳答案

文档说它们在文档大小增加超过分配的大小时被重新排序,但是,似乎只要文档大小发生变化它们就会被重新排序(如果大小相同则不会改变)。

例如,这里第一个命令没有改变,但是第二个命令改变了。

> db.t3.insert({_id : 1234',id:'xxx',
fullname:'use1',password:'password','username':'user'})
> db.t3.update({'_id':'1234'},{$set : {fullname:'use1'}})
> db.t3.findOne()
{
"_id" : "1234",
"id" : "xxx",
"fullname" : "use1",
"password" : "password",
"username" : "user"
}
> db.t3.update({'_id':'1234'},{$set : {fullname:'use11'}})
> db.t3.findOne()
{
"_id" : "1234",
"fullname" : "use11",
"id" : "xxx",
"password" : "password",
"username" : "user"
}

看这里https://jira.mongodb.org/browse/SERVER-2592

关于mongodb - 为什么 MongoDb 在更新后按字母顺序对齐集合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com