Pomocí následujícího agregačního kanálu získáte požadovaný seznam ObjectId. Toto používá $ifNull
agregačního operátora pro přidání _id
pole general_products
pole neexistuje:
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"
}
}
}
]);
Získáte tak dokument s polem list_products
s ObjectIds:
/* 1 */
{
"result" : [
{
"_id" : null,
"list_products" : [
ObjectId("554b9f223d77c810e8915539"),
ObjectId("554b9f2e3d77c810e8915549"),
ObjectId("554b99b83d77c810e8915436"),
ObjectId("554b9f173d77c810e8915533"),
ObjectId("554b9f143d77c810e8915530"),
ObjectId("554b9f123d77c810e891552f")
]
}
],
"ok" : 1
}