订单在mongo db中得到这样的东西

时间:2016-11-22 10:35:08

标签: mongodb

我对mongodb很新。请帮我解决这个问题。

以下是mongo db中的文件:

{name : sass, city : banga}, 
{name : pass, city : banga}, 
{name : kanga, city : runga}, 
{name : jass, city : canga}, 
{name : dass, city : tunga}

我想在城市中查询' banga',以便结果数组应包含带有city&banga'的文档。首先,然后是所有其他文件。

感谢。

2 个答案:

答案 0 :(得分:2)

请试试这个。以下查询将为您提供" banga"在顶部和之后的所有其他文件。

注意: -

请注意,查询不按城市对数据进行排序。它只是回归" banga"顶部的文件。那些" city"不等于" banga"在那之后可以是任何顺序。

<强>查询: -

您可能需要在以下查询中相应地更改集合名称。

db.collection.aggregate([
{ $project: {_id : 1, "name": 1, "city" : 1, 
    isRequiredCity: { $cond: { if: { $eq: [ "$city", "banga" ] }, then: 0, else: 1 } }} },
{$sort : {"isRequiredCity" : 1} }    
]);

<强>输出: -

/* 1 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c67"),
    "name" : "sass",
    "city" : "banga",
    "isRequiredCity" : 0
}

/* 2 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c6a"),
    "name" : "pass",
    "city" : "banga",
    "isRequiredCity" : 0
}

/* 3 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c68"),
    "name" : "kanga",
    "city" : "runga",
    "isRequiredCity" : 1
}

/* 4 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c69"),
    "name" : "jass",
    "city" : "canga",
    "isRequiredCity" : 1
}

/* 5 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c6b"),
    "name" : "dass",
    "city" : "tunga",
    "isRequiredCity" : 1
}

答案 1 :(得分:0)

一个选项是为所有文档添加特定字段。新字段将通过唯一值标识所有文档包含 city:banga 。 您可以根据该值订购所有集合。

例如,让我们向所有集合添加唯一字段和唯一值:

db.collection.update({'city':'banga'}, {$set:{"value":10}}, {upsert:false, multi:true});
db.collection.update({'city': { $ne: 'banga'}}, {$set:{"value":1}}, {upsert:false, multi:true});

现在,每个带有字段'city'=='banga'的文档的值= 10 ,每个文档的字段为'city'!=' banga'值= 1

现在,您可以使用字段对集合中的文档进行排序。

db.collection.find({}).sort({'value': -1})