我想運行一個更新子查詢樣式,而不是在MongoDB中,但它不工作。我相信它是因爲toArray
將ObjectIds
轉換爲文本而不是將其保留爲DBRef
。以下是我的代碼:
var items = db.listsProducts.find({_id: {$exists: true}}, {product: true, _id: false}).toArray();
db.products.update({_id: {$nin: items}}, {$set: {'status':'inactive'}},{multi:true});
'product'是listProducts集合中的DBRef字段。 「產品」是我試圖更新的集合。
而不是更新不在'項目'中的字段,它更新所有文檔。
我在做什麼錯?謝謝。
listsProducts:
{
「_id」:的ObjectId( 「54e4bf7bade0276f008b4567」),
「__type」: 「核心\利布斯\清單\實體\產品」,
「類型」: 「inventoryItem」,
「產品」:DBREF( 「產品」,的ObjectId( 「54e308e23b8e778d128b4799」)),
「清單」:DBREF( 「名單」 的ObjectId( 「54e4aeab5252416c008b4569」)),
「inventoryData」: {
「__type」: 「核心\利布斯\清單\實體\產品\ InventoryData」
「parLevel」:NumberLong(0),
「itemsOnHand」:NumberLong(0)
},
「timeLog」: {
「__type」: 「核心\ utils的\實體\ TimeLog」
「createdAt」:ISODate( 「2015-02-18T16:36:11.387 + 0000」),
「updatedAt」:ISODate(「2015年-07-07T07:31:25。900 + 0000 「),
」deletedAt「:空
}
}
產品:
{
」_id「:的ObjectId(」 54e308d83b8e778d128b4588 「),
」 __type「:」Core \ Libs \ Product \ Entity \ Product「,
」name「:」Carrot Slices「,
」gtin「:」10071179184300「,
「狀態」: 「活動」,
「defaultPrice」:NumberLong(0),
「引用」:{
「__type」: 「核心\利布斯\產品\實體\產品\參考」,
「製造商」:DBREF( 「製造商」,的ObjectId( 「54e308d73b8e778d128b4569」)),
「類別」:DBREF( 「1WS類別」,的ObjectId( 「53e1e8723b8e77a52b8b45fd」))
},
「信息」:{ 「__type」:「Core \ Libs \ Product \ Entity \ Product \ Information」,
「description」:{
「__type」:「Core \ Libs \ Product \ Entity \ Product \ Description」,
「short」:「Carrot Smooth Sli 1/20」,
「long」:「Simplot Classic - Carrot Smooth Sli 1/20# 「
},
」屬性「:{
」__type「: 」Xeeo \ SERVICES \核心\摘要\收藏「,
」實體「:
{
」__type「:」 Core \ Utils \ Entities \ KeyValuePair「,
」key「:」品牌名稱「,
「值」: 「辛普勞經典」
},
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」
「鑰匙」: 「製造商GLN」,
「值」:「 0071179000009"
},
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」
「鑰匙」: 「製造商名」,
「值」:「J. R.辛普勞公司」
},
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」,
「鑰匙」: 「國家的起源」,
「值」: 「US」
} ,
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」
「鍵」: 「最後修改日期」,
「值」: 「2014-12-03T09:42:04」
},
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」
「鍵」: 「出版日期」,
「值」: 「2011-10-26T00:00:00」
}
{
「__type」: 「核心\ utils的\實體\ KeyValuePair」,
「鑰匙」: 「開始發售日期」,
「值」: 「2014-12-03T00:00:00」
},
{
「__type」:「Core \ Utils \ Entiti ES \ KeyValuePair 「
」鑰匙「: 」深度(IN)「,
」值「: 」13.375「
}
]
}
},
」圖像「:」 http://www.fsenetportal.com/FSENetimages.nsf/0/BB29958620D9515A87257AA6005068B1/ $文件/10071179184300_A1CD.jpg?OpenElement 「
」elasticSearchIndexStatus「: 」索引「,
」timeLog「:{
」__type「: 」核心\ utils的\實體\ timeLog「
」createdAt「:ISODate(」 2015-02-17T09:24:40.138 + 0000" ),
「updatedAt」:ISODate( 「2016-03-25T00:56:21.219 + 0000」),
「deletedAt」:空
}
}
「product」是一個DBRef,所以我需要map函數返回的是i.product._id。但是,當我更新您的地圖功能返回i.product。_id我得到以下:寫結果({ \t 「nMatched」:0, \t 「nUpserted」:0, \t 「n修改」:0, \t 「writeError」:{ \t \t 「代碼」:2, \t \t「errmsg」:「ArrayFilterEntries相等性不能被定義爲」 \t} }) – manioc
你可以發佈一個來自'items'和'products'collections的文檔的例子嗎? – lascort
好的我發佈了一個列表的例子產品和產品文檔 – manioc