我正在尝试找到一种有效的方法来搜索mongo以查找是否存在提供的新数据(例如下面的电话号码),如果它们不存在我想将它们插入到另一个集合中。
如果phone number
不存在,搜索与用户关联的数组[123456789,15,20]中的phone no.15, 20
是否存在,那么我需要确定数据库中不存在的某种方式集合,所以我可以插入另一个集合。我正在尝试以最有效的方式找到我的要求的解决方案,所以我没有经常访问数据库。
{
"_id" : "mJPqhyyGoeyfa3p2w",
"createdAt" : ISODate("2015-11-30T22:33:27.649Z"),
"phone" : {
"number" : "123456789",
"verified" : true
},
"profile" : {
"picture" : "xx",
"name" : "User IOS Mobile"
}
}
答案 0 :(得分:0)
如果要将不在'lineNo'数组中的所有元素插入到另一个集合中,则需要使用preg_match()运算符和$project
运算符。当然,$setDifference
方法提供了对聚合管道的访问。
然后,您将使用.aggregate()
操作进行插入。
var bulk = db.LineNoNotFound.initializeUnorderedBulkOp();
var count = 0;
db.inventory.aggregate([
{ '$group': {
'_id': null,
'phones': {'$push': '$phone.number'}
}},
{ '$project': {
'notFound': {
'$setDifference': [ [ 5, 15, 20, 25 ], '$phones' ]
}
}},
{ '$match': { 'notFound.0': { '$exists': true } } }
]).forEach(function(doc) {
doc.notFound.forEach(function(num) {
bulk.insert( { 'lineNo': num } );
count++;
});
if (count % 100 === 0) {
bulk.execute();
bulk = db.LineNoNotFound.initializeUnorderedBulkOp();
}
});
if (count > 0) bulk.execute();