2016-04-04 17 views
0

MongoDBではなく、動作していないclateで更新サブクエリスタイルを実行しようとしています。 toArrayは、のままではなく、ObjectIdsをテキストにキャストするため、私はそれを信じています。以下は私のコードです:

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フィールドです。 'products'は私が更新しようとしているコレクションです。

'items'にないフィールドを更新する代わりに、すべてのドキュメントを更新します。

私は間違っていますか?ありがとう。

listsProducts:

{
"_id":ObjectIdが( "54e4bf7bade0276f008b4567")、
"__type": "コア\ Libsの\リスト\エンティティ\製品"、
"タイプ": "inventoryItem"、
"製品":DBRef( "製品"、のObjectId( "54e308e23b8e778d128b4799"))、
"リスト":DBRef( "リスト"、のObjectId( "54e4aeab5252416c008b4569"))、
"inventoryData": {
"__type": "コア\ Libsの\リスト\エンティティ\製品\ 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":NULL
}
}

製品:

{
"_id":のObjectId(" 54e308d83b8e778d128b4588 ")、
"
"名前": "ニンジンスライス"
"gtin": "10071179184300"、"__type": "Core \ Libs \ Product \ Entity \ Product" "ステータス": "アクティブ"、
"defaultPrice":NumberLong(0)、
"参照":{
"__type": "コア\ Libsの\製品\エンティティ\製品\参照"、
"メーカー":DBRef( "メーカー" のObjectId( "54e308d73b8e778d128b4569"))、
"カテゴリ":DBRef( "1WS-カテゴリ" のObjectId( "53e1e8723b8e77a52b8b45fd"))
}、
"情報":{
"__type": "Core \ Libs \ Product \ Entity \ Product \ Information"、
"description":{
"__type": "コア\ Libsの\製品\エンティティ\製品\説明"、
"短い": "キャロットスムーズSLI 1月20日#"、
"長い":「SIMPLOTクラシック - キャロットスムーズSLI 1/20# "
}、
は、 "属性":{
"__type": "Xeeo \ Servicesの\コア\抄録\コレクション"、
"実体":[
{
"__type":" Core \ Utils \ Entities \ KeyValuePair "、
" key ":"ブランド名 "、
"値": "SIMPLOTクラシック"
}、
{
"__type": "コア\ Utilsの\エンティティ\ KeyValuePair"
"キー": "メーカーGLN"、
"値": " 0071179000009"
}、
{
"__type": "コア\ Utilsの\エンティティ\ KeyValuePair"
"キー": "メーカー名"、
"値":「J. R.SIMPLOT会社」
}、
{
"__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":NULL
}
}

答えて

0

{_id: {$nin: items}}ObjectIdsの及びからの配列を期待私はあなたが文書の配列を渡しているのを見ることができます。さらに悪いことに、findクエリで_idを選択しないようにmongoに指示しているようです。

これは私がこれについてどうやって行くのかです。

var items = db.listsProducts.find({_id: {$exists: true}}, {product: true, _id: true}).toArray(); 

var itemIds = items.map(function(i) { 
    return i._id; 
}); 

db.products.update({_id: {$nin: itemIds}}, {$set: {status: 'inactive'}}, {multi: true}); 
+0

"product"はDBRefなので、返すmap関数が必要なのはi.product._idです。しかし、i.productを返すようにマップ関数を更新すると、WriteResult({ \t "nMatched":0、 \t "nUpserted":0、 \t "nModified":0、 \t "writeError":{ \t \t "コード":2、 _id Iは、次を得ます\t \t "errmsg": "ArrayFilterEntries equalityを未定義にすることはできません" \t} } – manioc

+0

'items'と' products'コレクションの両方からドキュメントの例を投稿できますか? – lascort

+0

ok私はlistsProductsと製品ドキュメントの例を掲載 – manioc

関連する問題