我对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'的文档。首先,然后是所有其他文件。
感谢。
答案 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})