我有一个包含 2 个结构文档的“名称”集合:
文档 1:
{
a: 1
b : [{name:"AAA",age:10},
{name:"BBB",age:12},
{name:"CCC",age:13}]
}
Run Code Online (Sandbox Code Playgroud)
文档 2:
{
a: 2
b : [{name:"DDD",age:14},
{name:"EEE",age:15},
{name:"FFF",age:16}]
}
Run Code Online (Sandbox Code Playgroud)
由于我是 MongoDB 的新手,我试图找出使用 $elemMatch 运算符与不使用它的区别。基本上,我试图查询并找到第一个名称为 AAA 且年龄为 10 岁的文档(文档 1)。因此,使用 $elemMatch,我的查询如下所示:
db.name.find({b: {$elemMatch :{name:"AAA",age:10}}})
Run Code Online (Sandbox Code Playgroud)
这个查询工作得很好,但我的问题是,当我可以这样查询时,有什么需要使用这个查询:
db.name.find({b:{name:"AAA",age:10}})
Run Code Online (Sandbox Code Playgroud)
我相信 $elemMatch 应该有一些原因,只是试图找到差异。预先感谢您的回复!!!
我想更改 MongoDB 文档中的字段名称(只是字段名称而不是值)。该文档如下所示(如下所示),并且在 user= Soham 的集合中只有一个文档:
{_id : ObjectId(xxxxxxxxxxxx),
user : "Soham",
age : 29
}
Run Code Online (Sandbox Code Playgroud)
现在我想将名为 'user' 的字段更改为 'name',而不是该字段的值。所以在 mongo shell 中我写了以下命令:
var soh = db.user.find({"user":"Soham"});
soh.name = soh.user;
delete soh.user;
db.user.update({"user":"Roshan"},soh);
Run Code Online (Sandbox Code Playgroud)
当我运行更新命令时,它抛出了我的错误。因为我是 MongoDB 的新手,所以不确定我哪里出错了。任何形式的帮助表示赞赏。
我想更新其中一个文档中的 _id 字段(如下所示)。
{
_id : ObjectId("586d9d5d23352af1a4aa05f7"),
name: "Soham",
age : 99,
city : "XYZ"
}
Run Code Online (Sandbox Code Playgroud)
所以我运行了以下步骤:
var doc = db.names.find({name:"Soham"});
doc._id = 111 ; -- 111 is not present in that collection for any document
db.names.remove({_id:ObjectId("586d9d5d23352af1a4aa05f7")});
db.names.insert(doc);
Run Code Online (Sandbox Code Playgroud)
前 3 行没有抛出任何错误,但是当我运行 insert 命令时,它抛出了错误。任何人都可以让我知道出了什么问题。
提前致谢!!!
I have a document in collection testcol in MongoDB like this :
{
_id:111,
"xxx":"aaa",
"yyy":"bbb"
}
Run Code Online (Sandbox Code Playgroud)
I want to update the field yyy in the document, if the field is found then update it and if the field is not found then don't do anything.
When I am running my mongo db update command like db.testcol.update({_id:0},{$set:{"zzz":"ccc"}},{upsert: false}). Intentionally I gave the field as "zzz" in the update command so that it shouldn't do anything. But when I run …