在MongoDB中,我想編寫一個查詢從數組中元素添加到現有的文檔,但不是添加元素作爲對象:如何將MongoDB中的元素數組添加到現有文檔中的數組中?
property: ObjectID(xxx)
的元素越來越添加只是
ObjectID(xxx)
原諒我,如果我得到的術語錯了。我對MongoDB完全陌生;我通常只使用關係數據庫。我如何正確添加這些新元素?
我有一個叫做拍賣的集合,它有兩個字段:ID和屬性。屬性是一個名爲property的對象數組。這裏有兩個拍賣文件的例子:
**我改變了對象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 } } }
);
此查詢結果如下。注意,不是從我的數組中添加名爲property的元素,而是從我的數組中添加我的值。我顯然需要添加「屬性」部分,但我該怎麼做?
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的新手。我正在使用MongoChef來編寫查詢。在編寫查詢時是否可以使用大部分JavaScript函數? – boilers222
MongoDB使用JavaScript引擎[SpiderMonkey](https://developer.mozilla。org/en-US/docs/Mozilla/Projects/SpiderMonkey)的[mongo](https://docs.mongodb.org/manual/reference/program/mongo/#bin.mongo)shell和服務器端[mongod](https://docs.mongodb.org/manual/reference/program/mongod/#bin.mongod)中的javascript,因此在mongo shell中編寫查詢時api可用,儘管與MongoDB的大多數交互都不使用JavaScript但在交互應用程序的語言中使用[慣用驅動程序](https://docs.mongodb.org/manual/applications/drivers/)。 – chridam