Utilizzare la pipeline di aggregazione seguente per ottenere l'elenco di ObjectId desiderato. Questo utilizza $ifNull
operatore di aggregazione per aggiungere il _id
campo se l'array general_products
il campo non esiste:
db.products.aggregate([
{
"$match": {"warehouse_sku": /^1/ }
},
{
"$group": {
"_id": {
"_id": "$_id",
"general_products": "$general_products"
},
"data": {
"$addToSet": "$_id"
}
}
},
{
"$project": {
"_id": 0,
"general_products": {
"$ifNull": ["$_id.general_products", "$data"]
}
}
},
{
"$unwind": "$general_products"
},
{
"$group": {
"_id": null,
"list_products": {
"$addToSet": "$general_products"
}
}
}
]);
Questo ti darà un documento con un array list_products
con ObjectId:
/* 1 */
{
"result" : [
{
"_id" : null,
"list_products" : [
ObjectId("554b9f223d77c810e8915539"),
ObjectId("554b9f2e3d77c810e8915549"),
ObjectId("554b99b83d77c810e8915436"),
ObjectId("554b9f173d77c810e8915533"),
ObjectId("554b9f143d77c810e8915530"),
ObjectId("554b9f123d77c810e891552f")
]
}
],
"ok" : 1
}