【发布时间】:2016-04-22 23:38:37
【问题描述】:
在 MongoDB 中,我正在尝试编写一个查询来将数组中的元素添加到现有文档中,而不是将元素添加为对象:
property: ObjectID(xxx)
元素正在被添加
ObjectID(xxx)
如果我弄错了术语,请原谅我。我对 MongoDB 完全陌生;我通常只使用关系数据库。如何正确添加这些新元素?
我有一个名为拍卖的集合,它有两个字段:ID 和属性。属性是一个名为属性的对象数组。这是一个包含两个拍卖文件的示例:
** 我更改了对象 ID,以便在我们的讨论中更容易引用它们
Collection db.auctions
{
"_id" : ObjectId("abc"),
"properties" : [
{
"property" : ObjectId("prop1")
},
{
"property" : ObjectId("prop2")
},
{
"property" : ObjectId("prop3")
}]
}
{
"_id" : ObjectId("def"),
"properties" : [
{
"property" : ObjectId("prop97")
},
{
"property" : ObjectId("prop98")
}]
}
我想添加 3 个新属性来拍卖“abc”。我该怎么做?
这是我尝试过的:
我有一个如下所示的属性数组:
Array PropsToAdd
[
ObjectId("prop4"),
ObjectId("prop5"),
ObjectId("prop6")
]
我编写了一个更新查询来将这些属性推送到拍卖中的属性数组中:
db.auctions.update(
{"_id": "abc"}
,
{ $push: { properties: { $each: PropsToAdd } } }
);
这个查询给出了下面的结果。请注意,不是使用我的数组中的值添加命名属性的元素,而是添加我的数组中的值。我显然需要添加那个“属性”部分,但我该怎么做呢?
Collection db.auctions (_id "abc" only)
{
"_id" : ObjectId("abc"),
"properties" : [
{
"property" : ObjectId("prop1")
},
{
"property" : ObjectId("prop2")
},
{
"property" : ObjectId("prop3")
},
ObjectId("prop4"),
ObjectId("prop5"),
ObjectId("prop6"),
ObjectId("prop7")]
}
我要找的结果是这样的:
Collection db.auctions (_id "abc" only)
{
"_id" : ObjectId("abc"),
"properties" : [
{
"property" : ObjectId("prop1")
},
{
"property" : ObjectId("prop2")
},
{
"property" : ObjectId("prop3")
},
{
"property" : ObjectId("prop4")
},
{
"property" : ObjectId("prop5")
},
{
"property" : ObjectId("prop6")
}
}
以下是有关我要添加的属性数组的更多信息。我通过运行这些查询得到它。也许其中一个需要改变?
此查询获取当前属性的数组:
var oldActiveProperties = db.properties.distinct( "saleNumber", { "active": true, "auction": ObjectId("abc") } );
然后这些结果用于在新文件中查找旧文件中没有的属性:
var PropsToAdd = db.newProperties.distinct(
"_id"
, { "saleNumber": { "$nin": oldActiveProperties }, "active": true}
);
结果数组是我需要添加到拍卖集合中的。
【问题讨论】:
标签: mongodb mongodb-query