我在Mongodb
集合中有一个文档,我希望remove an object
使用title
密钥。
我尝试使用$unset
,但它只是removes the title key
而不是它所属的对象。
{
"_id" : ObjectId("576b63d49d20504c1360f688"),
"books" : [
{
"art_id" : ObjectId("574e68e5ac9fbac82489b689"),
"title" :"abc",
"price" : 40
},
{
"art_id" : ObjectId("575f9badada0500d192c53f4"),
"title" : "xyz",
"price" : 20
},
{
"art_id" : ObjectId("57458224d86b3d1561150f17"),
"title" : "def",,
"price" : 30
}
],
"user_id" : "575570c315e27d13167dfc0d"
}
答案 0 :(得分:2)
$unset
不会从数组中删除对象。 The $unset operator deletes a particular field.
doc。
改为使用$pull
。
$ pull运算符从现有数组中删除与指定条件匹配的值的所有实例。
尝试以下查询
db.collName.update({$pull : {books:{title:abc}}})
希望这会对你有所帮助。
答案 1 :(得分:2)
要删除包含查询对象的整个对象,请使用db.remove()查询。
对于你的情况:
define dispStr(str, x, y) dispStrFont(str, normal_font, x, y, 0)
请仔细检查引用数组元素的格式。 这将删除包含嵌入式查询obj的整个对象 s 。要仅删除单个对象,请为其提供另一个字段以唯一标识它。
如果您只想从数组中删除包含title字段的对象但想要保留包含该数组的对象,请使用$ pull运算符。 This回答会有所帮助。
示例:如果要删除对象
db.yourcollection.remove({"books.title": "abc"});
仅来自数组,但保留父对象,如
{
"art_id" : ObjectId("574e68e5ac9fbac82489b689"),
"title" :"abc",
"price" : 40
}
使用
{
"_id" : ObjectId("576b63d49d20504c1360f688"),
"books" : [
{
"art_id" : ObjectId("575f9badada0500d192c53f4"),
"title" : "xyz",
"price" : 20
},
{
"art_id" : ObjectId("57458224d86b3d1561150f17"),
"title" : "def",,
"price" : 30
}
],
"user_id" : "575570c315e27d13167dfc0d"
}
答案 2 :(得分:0)
尝试使用pull。
https://docs.mongodb.com/manual/reference/operator/update/pull/
$拉
The $pull operator removes from an existing array all instances of a value or values that match a specified condition. The $pull operator has the form: { $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } } To specify a <field> in an embedded document or in an array, use dot notation.
答案 3 :(得分:0)
尝试使用mongo shell
db.yourcollection.remove({书:[{标题:&#39; title_you_want&#39;}]})
小心牙套。
答案 4 :(得分:0)
如果...?我想删除文档内部而不是数组中的对象吗?
{
"_id" : ObjectId("576b63d49d20504c1360f688"),
"books" : {
"574e68e5ac9fbac82489b689": {
"art_id" : ObjectId("574e68e5ac9fbac82489b689"),
"title" :"abc",
"price" : 40
},
"575f9badada0500d192c53f4": {
"art_id" : ObjectId("575f9badada0500d192c53f4"),
"title" :"xyz",
"price" : 20
},
"57458224d86b3d1561150f17": {
"art_id" : ObjectId("57458224d86b3d1561150f17"),
"title" : "def",
"price" : 30
}
},
"user_id" : "575570c315e27d13167dfc0d"
}
解决方案是这样的:
db.auctions.update(
{'_id': ObjectId("576b63d49d20504c1360f688")},
{$unset: {"books.574e68e5ac9fbac82489b689":
{_id: "574e68e5ac9fbac82489b689"}}})